Engineer Blog開発者ブログ

2017.6.27

Oracle SQLで使用するLIKE演算子とワイルドカードについて

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
A
DB
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に偏っていますが!!)

 

それではまた次回の記事で。

 

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00