LIKE 演算子を利用して文字列フィールドをパターンマッチ検索するSQL文を紹介します。
こちらの記事ではLIKE演算子を利用してワイルドカードを利用した文字列フィールドの検索SQLを紹介しました。
LIKE 演算子はワイルドカード以外にパターンマッチの検索もできます。この記事では、LIKE演算子を利用してパターンマッチの検索をするSQL文を紹介します。
SELECT ... WHERE (列名) LIKE (検索式)
パターンマッチには以下の書式が利用できます。
| ワイルドカード文字 | 意味 |
|---|---|
| % | 0文字以上の任意の文字列 |
| _ | 任意の1文字 |
| [ ... ] | 指定した範囲、または文字列の任意の1文字 |
| [ ^... ] | 指定した範囲、または文字列に含まない任意の1文字 |
SELECT * FROM Products WHERE name LIKE '[a-z]'
次のテーブルを準備します。
| 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 |
先の例と同じテーブルで、以下の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 |
先の例と同じテーブルで、以下の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 |