SQL like 前方一致、あいまい検索、エスケープ

SQLのselect文のlikeで前方一致やあいまい検索するサンプルです。

目次

selectのlike 前方一致で検索する
  あいまい検索/部分検索で検索する
  後方一致で検索する
  like + 否定
  アンダスコア(_)で任意の1文字を指定する
  エスケープする(検索したい文字列に%や_があるとき)
  likeで日時型を指定する場合

前方一致で検索する

select * from テーブル名
where 項目名 like '値%'

select文の条件にlike 値%とすると前方一致で検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike 値%を指定します。

select * from Syain
where romaji like 'tana%'

2行目は、likeと%を指定しています。
項目「romaji」にtanaで始まる行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
2 田中 tanaka

あいまい検索/部分検索で検索する

select * from テーブル名
where 項目名 like '%%'

select文の条件にlike %値%とするとあいまい検索/部分検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike %値%を指定します。

select * from Syain
where romaji like '%a%'

2行目は、likeと%2つを指定しています。
項目「romaji」にaが含まれる行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
2 田中 tanaka
3 佐藤 sato

後方一致で検索する

select * from テーブル名
where 項目名 like '%値'

select文の条件にlike %値とすると後方一致で検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike %値を指定します。

select * from Syain
where romaji like '%ki'

2行目は、likeと%を指定しています。
項目「romaji」にkiで終わる行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki

like + 否定

select * from テーブル名
where 項目名  not like '(%)値(%)'

select文の条件にnot likeを使用とするとlikeの否定で検索できます。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にnot like %値%を指定します。

select * from Syain
where romaji not like '%a%'

2行目は、not likeと%を指定しています。
項目「romaji」にaが含まれない行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki

アンダスコア(_)で任意の1文字を指定する

select * from テーブル名
where 項目名  like '(_)値(_)'

select文の条件にlikeとアンダスコア(_)を使用する場合、アンダスコア_は任意の1文字を表します。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

SQL

上記テーブルに対して条件にlike 値_を指定します。

select * from Syain
where romaji like '%t_'

2行目は、likeと%と_を指定しています。
項目「romaji」に任意の文字のあとにtがあり、その後に任意の一文字だけある行を抽出します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
3 佐藤 sato

1行目のtanakaは抽出されません。

エスケープする(検索したい文字列に%や_があるとき)

select * from テーブル名
where 項目名  like '(エスケープ文字%or_)値(エスケープ文字%or_)' escape 'エスケープ文字'

likeの後にescapeを使用すると指定した文字の後はエスケープされます。
検索したい文字列に%や_があるときに使用します。

以下のテーブルがあるとします。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 %sato

SQL

上記テーブルに対して条件にlikeとescapeを指定します。

select * from Syain
where romaji like '\%%' ESCAPE '\';

2行目は、escapeの文字として\を指定しています。
エスケープ文字は\がよく使われますが、その他の文字でも指定可能です。

\%%となっているので、1つめの%はエスケープされ%という文字で検索されます。
2つめの%はあいまい検索の機能として動作します。

結果

結果は、以下のとおりです。

syainテーブル
id name romaji
3 佐藤 %sato

likeで日時型を指定する場合

OracleのTIMESTAMP型などの日時型をlikeで指定する場合、そのまま指定しても値を取得できません。

select * from syain1
where created_at like '2020/05%' --値を取得できない

以下のようにTO_CHARで一旦文字列にしてからlikeを使用します。

select * from syain1
where TO_CHAR(created_at, 'YYYY/MM') like '2020/05%'

または、betweenで範囲を指定します。
SQL between 範囲を指定して検索する

関連の記事

SQL in句 複数の値を条件にする

△上に戻る