LIKE 演算子を利用して文字列フィールドをパターンマッチ検索するSQL文を紹介します。
概要
こちらの記事ではLIKE演算子を利用してワイルドカードを利用した文字列フィールドの検索SQLを紹介しました。
LIKE 演算子はワイルドカード以外にパターンマッチの検索もできます。この記事では、LIKE演算子を利用してパターンマッチの検索をするSQL文を紹介します。
書式
SELECT ... WHERE (列名) LIKE (検索式)
パターンマッチには以下の書式が利用できます。
ワイルドカード文字 | 意味 |
% | 0文字以上の任意の文字列 |
_ | 任意の1文字 |
[ ... ] | 指定した範囲、または文字列の任意の1文字 |
[ ^... ] | 指定した範囲、または文字列に含まない任意の1文字 |
記述例
SELECT * FROM Products WHERE name LIKE '[a-z]'
例1
次のテーブルを準備します。
ProductsA テーブルid | name | price | category |
1 | Penguin | 500 | Bird |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 920 | Mammal |
5 | Owl | 185 | Bird |
6 | Whale | 880 | Mammal |
以下のSQLを実行します。
nameフィールドの文字列の先頭が、A,B,C,Dいずれか一致するレコードを取り出します。
SELECT * FROM ProductsA WHERE name LIKE '[A-D]%'
次の結果になります。nameの先頭が B,C,Dの項目が検索結果として取得できます。
id | name | price | category |
2 | Bear | 1050 | Mammal |
3 | Duck | 150 | Bird |
4 | Camel | 920 | Mammal |
例2
先の例と同じテーブルで、以下のSQL文を実行します。nameの値の1文字目が、A,B,C,Dで2文字目がa,b,c,dのレコードを取得します。
SELECT * FROM ProductsA WHERE name LIKE '[A-D][a-d]%'
次の結果になります。nameの先頭が C、2文字目が aの項目が検索結果として取得できます。
id | name | price | category |
4 | Camel | 920 | Mammal |
例3
先の例と同じテーブルで、以下のSQL文を実行します。nameの値の1文字目が、B,O,X 以外ののレコードを取得します。
SELECT * FROM ProductsA WHERE name LIKE '[^BOX]%'
SQLの実行結果は以下となります。nameの先頭の文字が B,O,X 以外のレコードが取得できます。
id | name | price | category |
1 | Penguin | 500 | Bird |
3 | Duck | 150 | Bird |
4 | Camel | 920 | Mammal |
6 | Whale | 880 | Mammal |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2024-01-07
作成日: 2024-01-06