2017年6月27日
Oracle SQLで使用するLIKE演算子とワイルドカードについて
こんにちは自称エリート(見習い)です。
今回はよく使用するLIKE演算子のパターンマッチングについて記述していきたいと思います。
特にintra-martのスクリプト開発では演算子の右辺の記述を動的なものにすることが多いと思いますので、
パターンマッチングを把握しておく必要があるかと思います。
そういった訳で基本的なことではありますが、備忘録的な意味も含めて書いていきます。
本題ですが、LIKE演算子はA列がBの文字列パターンに一致する場合に結果を返します。
よって「文字列パターンを”ワイルドカード”の使用によって作成することが前提」になってきます。
ワイルドカードとは特殊な役割を持つ文字のことですね。
ワイルドカードと重複する文字列がフィールドにデータとして入ることも有り得えます。
例えば今回の場合のワイルドカードは「%」や「_」が中るので「100%消える消しゴム」などですね。
その際はエスケープ処理を行います。
エスケープ処理とはワイルドカードの特殊性を打ち消して通常の文字列として扱うということです。
こちらはOracleやMySQLなど各SQLによって違い、現在使用しているPostgreSQLでは少し難しいのでまた別の機会に書きたいと思います。
LIKE演算子のワイルドカードとその意味は下記の通りです。
 
| % | 任意の0文字以上の文字列 | 
| _ | 任意の1文字 | 
任意の0文字以上と任意の1文字の違いがイマイチわかりにくいので例を挙げます。
 
「a%b」で検索をかけて引っかかる文字列はこちらです。
ab
acb
acdb
一方「A_B」で検索をかけて引っかかる文字列はこちらです。
ACB
ADB
AEB
文字数を指定しない場合は「%」を使用し、
文字数を指定する場合は「_(アンダースコア)」を使用すると考えればよいでしょう。
よって下記のように使用することができます。
上記を基に例を挙げていきます。
「%」の使用例
| 「%ab」で検索をかけた場合(最後にabが含まれる検索) | 
| cab | 
| cdab | 
| 「ab%」で検索をかけた場合(最初にabが含まれる検索) | 
| abc | 
| abcd | 
| 「%ab%」で検索をかけた場合(文字列のどこかにabが含まれる検索) | 
| cabd | 
| ceabdf | 
「_」の使用例
| 「_AB」で検索をかけた場合(最後にABが含まれる3文字の検索) | 
| CAB | 
| DAB | 
| 「AB__」で検索をかけた場合(最初にABが含まれる4文字の検索) | 
| ABCD | 
| ABEF | 
| 「A___B」で検索をかけた場合(ABの間に3文字含まれる検索) | 
| ACDEB | 
| 「_____」で検索をかけた場合(文字を指定しない5文字の検索) | 
| ABCDE | 
今回は以上になります。
最近SQLばかりの記事を書いていますが奥が深くて楽しいです。
まだまだ基本的なことばかりですが、各SQLを比較しながら書いていけたらいいなと思います!
(現在は課題で使用するPostgreSQLと資格取得を目指すOracleに偏っていますが!!)
それではまた次回の記事で。