目次
01. Like
02. サンプル
Likeの使い方
select * from テーブル名 where 列名 like 検索したいパターン |
前方一致やあいまい検索を行うときは、where句にlikeと検索したいパターンを指定します。
検索したいパターンは、パーセント(%)またはアンダスコア(_)のワイルドカードを使用します。
ワイルドカード
% | パーセント | 0文字以上の任意の文字列を表す |
_ | アンダスコア | 任意の1文字を表す |
前方一致で検索する
サンプル
select * from employee
where romaji like 'tana%'
解説
select * from テーブル名 where 列名 like '文字列%' |
前方一致検索は、likeと文字列の後にワイルドカードを指定します。
使用例
1.列名「romaji」で「tana」で始まる行を抽出します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2.SQLを実行します。
select * from employee
where romaji like 'tana%'
3.結果は、以下のとおりです。
id | name | romaji |
---|---|---|
2 | 田中 | tanaka |
あいまい検索/部分検索で検索する
サンプル
select * from employee
where romaji like '%a%'
解説
select * from テーブル名 where 列名 like '%文字列%' |
あいまい検索は、likeと文字列の前後にワイルドカードを指定します。
使用例
1.列名「romaji」で「a」がある行を抽出します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2.SQLを実行します。
select * from employee
where romaji like '%a%'
3.結果は、以下のとおりです。
id | name | romaji |
---|---|---|
2 | 田中 | tanaka |
3 | 佐藤 | sato |
後方一致で検索する
サンプル
select * from employee
where romaji like '%ki'
解説
select * from テーブル名 where 列名 like '%文字列' |
後方一致検索は、likeと文字列の前にワイルドカードを指定します。
1.列名「romaji」で「ki」で終わる行を抽出します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2.SQLを実行します。
select * from employee
where romaji like '%ki'
3.結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
like + 否定
サンプル
select * from employee
where romaji not like '%a%'
解説
select * from テーブル名 where 列名 not like '(%)文字列(%)' |
likeの否定は、likeの前にnotを指定します。
1.列名「romaji」で「a」が含まれない行を抽出します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2.SQLを実行します。
select * from employee
where romaji not like '%a%'
3.結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
任意の1文字を指定する(アンダスコア(_))
サンプル
select * from employee
where romaji like '%t_'
解説
select * from テーブル名 where 列名 like '(_)文字列(_)' |
アンダスコア(_)は、任意の1文字を表します。
1.列名「romaji」に0文字以上の任意の文字のあとに「t」があり、その後に任意の一文字だけある行を抽出します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2.SQLを実行します。
select * from employee
where romaji like '%t_'
3.結果は、以下のとおりです。
id | name | romaji |
---|---|---|
3 | 佐藤 | sato |
1行目のtanakaは抽出されません。
エスケープする(検索したい文字列に%や_があるとき)
サンプル
select * from employee
where romaji like '\%%' ESCAPE '\';
解説
select * from テーブル名 where 列名 like '(エスケープ文字%)文字列(エスケープ文字%)' escape 'エスケープ文字' |
エスケープは、検索したい文字列に%やアンダスコア(_)があるときに使用します。
1.列名「romaji」で「%」で始まる行を抽出します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | %sato |
2.SQLを実行します。
select * from employee
where romaji like '\%%' ESCAPE '\';
2行目は、escapeの文字として\を指定しています。
エスケープ文字は\がよく使われますが、その他の文字でも指定可能です。
\%%となっているので、1つめの%はエスケープされ%という文字で検索されます。
2つめの%はワイルドカードとして動作します。
3.結果は、以下のとおりです。
id | name | romaji |
---|---|---|
3 | 佐藤 | %sato |
likeで日時型を指定する場合(oracle)
1.OracleのTIMESTAMP型などの日時型をlikeで指定する場合、そのまま指定しても値を取得できません。
select * from employee1
where created_at like '2020/05%' --値を取得できない
2.以下のようにTO_CHARで一旦文字列にしてからlikeを使用します。
select * from employee1
where TO_CHAR(created_at, 'YYYY/MM') like '2020/05%'
または、betweenで範囲を指定します。
SQL between 範囲を指定して検索する
関連の記事