エンジニアの将来って?

現在8年目エンジニアがプログラムの解説、ゲームの研究を書く雑記ブログです

【SQL Server】あいまい検索ができるLIKE演算子について解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、SQL Serverであいまい検索ができるLIKE演算子について解説します。

スポンサーリンク

 

前提条件

この記事では、Microsoft SQL Server2017を使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

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演算子は、以下のように使います。

f:id:Tairax:20191116095512p:plain

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】テーブルです。

f:id:Tairax:20191116101606p:plain

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 '%中'

結果は下記になります。

f:id:Tairax:20191116102030p:plain

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 '_学生'

結果は下記になります。

f:id:Tairax:20191116102912p:plain

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]'

結果は下記になります。

f:id:Tairax:20191116103844p:plain

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]'

結果は下記になります。

f:id:Tairax:20191116104538p:plain

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】SELECT句について解説します

【SQL Server】昇順、降順のソートができるORDER BYについて解説します