目次
01. Like
02. サンプル
Likeの使い方
| select * from テーブル名 where 列名 like 検索したいパターン | 
前方一致やあいまい検索を行うときは、where句にlikeと検索したいパターンを指定します。
検索したいパターンは、パーセント(%)またはアンダスコア(_)のワイルドカードを使用します。
ワイルドカード
| % | パーセント | 0文字以上の任意の文字列を表す | 
| _ | アンダスコア | 任意の1文字を表す | 
前方一致で検索する
| select * from テーブル名 where 列名 like '文字列%' | 
select * from employee
where romaji like 'tana%'前方一致検索は、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 テーブル名 where 列名 like '%文字列%' | 
select * from employee
where romaji like '%a%'あいまい検索は、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 テーブル名 where 列名 like '%文字列' | 
select * from employee
where romaji like '%ki'後方一致検索は、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 テーブル名 where 列名 not like '(%)文字列(%)' | 
select * from employee
where romaji not like '%a%'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 テーブル名 where 列名 like '(_)文字列(_)' | 
select * from employee
where romaji like '%t_'アンダスコア(_)は、任意の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 テーブル名 where 列名 like '(エスケープ文字%)文字列(エスケープ文字%)' escape 'エスケープ文字' | 
select * from employee
where romaji 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 範囲を指定して検索する
関連の記事
