T-SQL LIKE演算子は、SQL SELECT文に追加された最も便利な機能の1つです。後者は結果セットを取得し、等価演算子とWHERE句を使用して特定の条件を選択することで簡単に結果をフィルタリングできます。しかし、部分的な値に基づいて行を選択したい場合はどうでしょうか?そのような場合にSQL LIKE文が登場し、このチュートリアルでその使用方法を示します。
SQL LIKE構文
以下のリストにLIKE演算子の基本構文が示されています。
- まず、一致させたい式を指定します。通常は列名です。
- 次に、オプションでNOTを指定して、一致しないすべての条件にこの式を適用することができます。NOT LIKE条件を使用することは、LIKE演算子を使用する最も一般的な方法ではありません。
- 次に、パターンに一致するものを提供する必要があります。これはリテラルであってもかまいませんが、ワイルドカード文字を含めることで、一致プロセスを柔軟にすることができます。
- この後に、ワイルドカード文字を検索するのに役立つエスケープ文字がオプションで続くことができます。
- 引数のいずれかが文字列データ型でない場合、SQL Server はそれを文字列データ型に変換します。
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
SQLのLIKEおよびワイルドカード文字
詳細に進む前に、SQLのLIKEパターンマッチングには通常の文字とワイルドカード文字の両方が含まれることを知っておく必要があります。ワイルドカード文字を使用すると、ワイルドカードパターンに一致する特定の文字列を選択できます。
パターンマッチングでは、通常の文字は文字列で指定された文字と一致する必要があります。ただし、ワイルドカード文字は文字列の任意の断片と一致することができます。ワイルドカード文字を使用すると、LIKE演算子は通常の等価(= および !=)文字列比較演算子よりも柔軟になります。
LIKE演算子は、4つの異なるタイプのワイルドカード文字を受け入れます。各ワイルドカード文字は異なる比較関数を実行し、詳細は以下の表を参照してください。
Wildcard character | Description |
% (percent sign) | Any string of zero or more characters. |
_ (underscore) | Any single character. |
[ ] | Any single character within the specified range [a-f] or set [abcdef]. |
[^] | Any single character not within the specified range [^a-f] or set [^abcdef]. |
LIKE演算子は、match_expressionが指定されたパターンと一致する場合にTRUEを返します。SQL LIKE演算子をAdventureWorksLT2019サンプルデータベースとともに使用する方法を示すために、いくつかの例を使用しましょう。
複数のワイルドカード文字の一致
ワイルドカードはゼロ個以上の文字を表します。次のクエリは、’LastName’が文字’A’で始まる「Person.Person」テーブルからすべての行を取得します。
USE AdventureWorksLT2019; SELECT FirstName, LastName FROM SalesLT.Customer WHERE LastName LIKE 'A%';

単一文字ワイルドカード一致
_ ワイルドカードは1文字を表します。次の例のクエリは、’Name’が任意の種類の4文字であり、ハイフンに続く「SalesLT.Product」テーブルからすべての行を取得します。
USE AdventureWorksLT2019; SELECT ProductID, Name FROM SalesLT.Product WHERE Name LIKE '____-%';

文字セットのワイルドカード一致
ワイルドカードは、指定された範囲やセット内の任意の1文字を表します。次のSQL文は、’SalesLT.Product’テーブルから、’Name’が’B’、’C’、または’D’で始まるすべての行を取得します。
USE AdventureWorksLT2019; SELECT Name FROM SalesLT.Product WHERE Name LIKE '[BCD]%';

文字の範囲に対するワイルドカード一致
また、LIKE句を使用して範囲検索をサポートすることもできます。このクエリは、’C’から’L’の間の任意の1文字で始まり、’ee’で終わる姓を取得します。
USE AdventureworksLT2019; SELECT LastName, FirstName FROM SalesLT.Customer WHERE LastName LIKE '[C-L]ee'

指定されたセットの一部でない文字を除外する
[^]ワイルドカードは、指定された範囲やセット内でない任意の1文字を表します。次のクエリは、’A’、’B’、または’C’で始まらないすべての行を ‘SalesLT.Product’テーブルから取得します。
USE AdventureworksLT2019; SELECT Name FROM SalesLT.Product WHERE Name LIKE '[^ABC]%';

複数のワイルドカード一致条件を使用する
LIKE句は、単一のクエリで複数のワイルドカードを組み合わせることもできます。次のクエリは、複数のSQLワイルドカードを使用して、’FirstName’に文字 ‘a’ が含まれ、’LastName’に任意の文字が続いて ‘l’ がある ‘Person.Person’ テーブルからすべての行を取得します。
USE AdventureworksLT2019; SELECT FirstName, LastName FROM SalesLT.Customer WHERE FirstName LIKE '%a%' AND LastName LIKE '_l%';

ワイルドカード文字を検索する
ワイルドカード一致は、LIKE演算子に強力さと柔軟性を追加します。ただし、これらのワイルドカード文字の一部と一致させるには、どのようにすればよいか疑問に思うかもしれません。
これを行うには、ワイルドカード文字を角かっこで囲み、ワイルドカード文字をリテラル文字として使用できるようにします。以下の表にいくつかの例を示します。
Pattern | Search value |
LIKE ‘%2[%]%’ | 2% |
LIKE ‘%[_]m%’ | _m |
LIKE ‘%[ [ ]%’ | [ |
- 最初の例は、パーセントワイルドカード文字に続く数字 2 に一致します。
- 2番目の例は、アンダースコア文字に続く文字 m に一致します。
- 3番目の例は、角かっこ文字に一致させるために使用されます。

SQL LIKE文は、SQL SELECT文を強化します
あなたがSQLのSELECT文のパワーと柔軟性を高めるためにSQL LIKE演算子をどのように使用できるかをよりよく理解するはずです。ここでは、さまざまなワイルドカード文字とともにLIKE句を使用する方法も示しました。複数のワイルドカード文字を一致させたり、単一文字を一致させたり、文字のセットを一致させたり、結果から文字を除外したりすることで、あなたは本当に多くの可能性を手に入れます。
Source:
https://petri.com/sql-like/