私は地名のリストを持っていて、それらをSQLデータベースのレコードに一致させたいのですが、問題はそのプロパティの後に名前の後に参照番号があることです。例えば。 「バリミーナP-4sdf5g」 は、INを使用することが可能であり、情報はありませんWHERE文にLIKEとINを使用できますか?
WHERE dbo.[Places].[Name] IN LIKE('Ballymena%','Banger%')
私は地名のリストを持っていて、それらをSQLデータベースのレコードに一致させたいのですが、問題はそのプロパティの後に名前の後に参照番号があることです。例えば。 「バリミーナP-4sdf5g」 は、INを使用することが可能であり、情報はありませんWHERE文にLIKEとINを使用できますか?
WHERE dbo.[Places].[Name] IN LIKE('Ballymena%','Banger%')
これは、一般的な誤解は、構築物について
b IN (x, y, z)
その(x, y, z)
はセットを表していることです。それはしません。
むしろ、それは
(b = x OR b = y OR b = z)
SQLを持っているが、1つのデータ構造のための単なるシンタックスシュガーです:テーブル。検索テキスト値をセットとして照会する場合は、それらを表に入れます。あなたはJOIN
Places
テーブルにあなたの検索テキストテーブルLIKE
JOIN
の条件を使用してテーブルを使用することができます。
WITH Places (Name)
AS
(
SELECT Name
FROM (
VALUES ('Ballymeade Country Club'),
('Ballymena Candles'),
('Bangers & Mash Cafe'),
('Bangebis')
) AS Places (Name)
),
SearchText (search_text)
AS
(
SELECT search_text
FROM (
VALUES ('Ballymena'),
('Banger')
) AS SearchText (search_text)
)
SELECT *
FROM Places AS P1
LEFT OUTER JOIN SearchText AS S1
ON P1.Name LIKE S1.search_text + '%';
に一致するように好きですが、あなたは使用またはその代わりにすることができます:正規表現を使用することでしょうもシンプルなソリューションを
WHERE (dbo.[Places].[Name] LIKE 'Ballymena%' OR
dbo.[Places].[Name] LIKE 'Banger%')
をこの
WHERE dbo.[Places].[Name] SIMILAR TO '(Banger|Ballymena)';
または
に似それはSQLで行うのかどうかはわかりませんが、おそらく何かそれらのWHERE dbo.[Places].[Name] REGEXP_LIKE(dbo.[Places].[Name],'(Banger|Ballymena)');
1は、少なくとも
はあなたが使用することができ、仕事や
WHERE
dbo.[Places].[Name] LIKE 'Ballymena%'
OR dbo.[Places].[Name] LIKE 'Banger%'
またはplaces.nameは常に同じ形式でであれば、スペースで文字列を分割する必要があります。
WHERE SUBSTRING(dbo.[Places].[Name], 1, CHARINDEX(dbo.[Places].[Name], ' '))
IN ('Ballymena', 'Banger')
部分文字列を使用したときに、データベースがなどでインデックスを使用することができる(ワイルドカードが末尾にある場合は、より良いチャンスを持っている)が、おそらくないかもしれないので、これは、パフォーマンスが低下することがあります。
残念ながら、いくつかの場所名にはスペースが含まれていますが、それほど良い解決策はありません+1 – Euclid
実際に動作する可能性がありますが、正規表現のサポートは標準SQLではありません。 –
何について似ていますか? – Breezer
'に似ている'はおそらく標準で 'regexp_like'と置き換えられています。我々は見るでしょう。 – Donnie