こんにちは。たいら(@tairaengineer2)です。
この記事では、SQL Serverであいまい検索ができるLIKE演算子について解説します。
スポンサーリンク
- 前提条件
- LIKE演算子とは
- 解説で使うテーブル
- サンプル1:ワイルドカードに%(パーセント)を使った時のLIKE演算子
- サンプル2:ワイルドカードに_(アンダースコア)を使った時のLIKE演算子
- サンプル3:ワイルドカードに[ ]を使った時のLIKE演算子
- サンプル4:ワイルドカードに[^]を使った時のLIKE演算子
- まとめ:LIKE演算子であいまい検索をしてみよう!
前提条件
この記事では、Microsoft SQL Server2017を使っています。
インストールの仕方は、下の記事をご参考ください。
LIKE演算子とは
LIKE演算子とは、とある列が指定したパターンにあっているかどうかを判定して、パターンにあっているものを抽出することができます。
LIKE (Transact-SQL)
適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse
指定された文字列が指定されたパターンと一致するかどうかを判断します。
パターンは、標準の文字とワイルドカード文字を含むことができます。
パターン検索時に、標準の文字は文字列に指定された文字と正確に一致する必要があります。
LIKE (Transact-SQL) - SQL Server | Microsoft Docsから引用させて頂きました
LIKE演算子は、以下のように使います。
SELECT 列1
,列2
,列3
FROM テーブル
WHERE 列1 LIKE '検索するパターン'
検索するパターンにはワイルドカードを使うことができます。
LIKE演算子では、以下のワイルドカードを使うことが出来ます。
ワイルドカード文字 | 説明 |
---|---|
% | 0個以上の文字で構成される任意の文字列です。 |
_ (アンダースコア) | 任意の 1 文字です。 |
[ ] | 指定した範囲 ([a-f]) またはセット ([abcdef]) 内にある任意の 1 文字です。 |
[^] | 指定した範囲 ([^a-f]) またはセット ([^abcdef]) 内にない任意の 1 文字です。 |
LIKE (Transact-SQL) - SQL Server | Microsoft Docsから引用させて頂きました
では、次の章からワイルドカードを実際に使って解説していきます!
解説で使うテーブル
解説で使うテーブルは、【Person】テーブルです。
id | name | age | job | gender |
---|---|---|---|---|
a001 | 田中 | 26 | 植木屋 | 1 |
a002 | 佐藤 | 35 | 運送 | 2 |
a003 | 山田 | 20 | 大工 | 1 |
a004 | 金子 | 35 | 翻訳 | 0 |
a005 | 田中 | 40 | エンジニア | 1 |
a006 | 田中 | 10 | 小学生 | 0 |
A101 | 鈴木 | 24 | プロ野球 | 2 |
A102 | 田畑 | 14 | 中学生 | 0 |
A103 | 中 | 21 | 大学生 | 0 |
上記のテーブルに対して4つのワイルドカードを使っていきます!
サンプル1:ワイルドカードに%(パーセント)を使った時のLIKE演算子
ワイルドカードの%(パーセント)は、0文字以上で構成される任意の文字列のパターンを指定することができます。
【name】の最後が【中】のデータを取得するように指定します。
SELECT id
,name
,age
,job
,gender
FROM Person
WHERE name LIKE '%中'
結果は下記になります。
id | name | age | job | gender |
---|---|---|---|---|
a001 | 田中 | 26 | 植木屋 | 1 |
a005 | 田中 | 40 | エンジニア | 1 |
a006 | 田中 | 10 | 小学生 | 0 |
A103 | 中 | 21 | 大学生 | 0 |
【name】の最後が【中】の0文字以上のデータを取得することができました!
サンプル2:ワイルドカードに_(アンダースコア)を使った時のLIKE演算子
ワイルドカードの_(アンダースコア)は、任意の 1 文字で構成される文字列のパターンを指定することができます。
【job】の文字列が【○学生】のデータを取得するように指定します。
SELECT id
,name
,age
,job
,gender
FROM Person
WHERE job LIKE '_学生'
結果は下記になります。
id | name | age | job | gender |
---|---|---|---|---|
a006 | 田中 | 10 | 小学生 | 0 |
A102 | 田畑 | 14 | 中学生 | 0 |
A103 | 中 | 21 | 大学生 | 0 |
【job】の文字構成が【○学生】であるデータを取得することができました!
サンプル3:ワイルドカードに[ ]を使った時のLIKE演算子
ワイルドカードの[ ]は、指定した範囲で構成される文字列のパターンを指定することができます。
【id】の文字列が【a00固定で1から3】のデータを取得するように指定します。
SELECT id
,name
,age
,job
,gender
FROM Person
WHERE id LIKE 'a00[1-3]'
結果は下記になります。
id | name | age | job | gender |
---|---|---|---|---|
a001 | 田中 | 26 | 植木屋 | 1 |
a002 | 佐藤 | 35 | 運送 | 2 |
a003 | 山田 | 20 | 大工 | 1 |
【id】の文字構成が【a00固定で1から3】であるデータを取得することができました!
サンプル4:ワイルドカードに[^]を使った時のLIKE演算子
ワイルドカードの[^]は、指定した範囲にない文字で構成される文字列のパターンを指定することができます。
【id】の文字列が【a00固定で1から3】ではないデータを取得するように指定します。
SELECT id
,name
,age
,job
,gender
FROM Person
WHERE id LIKE 'a00[^1-3]'
結果は下記になります。
id | name | age | job | gender |
---|---|---|---|---|
a004 | 金子 | 35 | 翻訳 | 0 |
a005 | 田中 | 40 | エンジニア | 1 |
a006 | 田中 | 10 | 小学生 | 0 |
【id】の文字構成が【a00固定で1から3】ではないデータを取得することができました!
スポンサーリンク
まとめ:LIKE演算子であいまい検索をしてみよう!
以上がLIKE演算子の解説です。
まとめなので、もう1度振り返ってみましょう。
SELECT 列1
,列2
,列3
FROM テーブル
WHERE 列1 LIKE '検索するパターン'
使うことができるワイルドカードは以下の4つです。
ワイルドカード文字 | 説明 |
---|---|
% | 0個以上の文字で構成される任意の文字列です。 |
_ (アンダースコア) | 任意の 1 文字です。 |
[ ] | 指定した範囲 ([a-f]) またはセット ([abcdef]) 内にある任意の 1 文字です。 |
[^] | 指定した範囲 ([^a-f]) またはセット ([^abcdef]) 内にない任意の 1 文字です。 |
LIKE (Transact-SQL) - SQL Server | Microsoft Docsから引用させて頂きました
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
他にもSQL Serverについて記事を書いています。
良ければこちらもご参考ください。
【SQL Server】先頭から指定した行数を取得するTOP句について解説します
【SQL Server】昇順、降順のソートができるORDER BYについて解説します
今までブログで書いたSQL Serverの解説記事のまとめは、こちらをご参考ください。