正規表現を使ったパターンマッチングで比較

広告

WHERE句で条件を指定する場合に、カラムの値と文字列の値を正規表現を使ったパターンマッチングする場合に使用するのがREGEXP演算子です。書式は次の通りです。

WHERE col_name REGEXP pattern
WHERE col_name NOT REGEXP pattern

正規表現を使ったパターンマッチングを行います。カラムの値がマッチすれば1(=TRUE)を返します。それ以外は0を返します。NOT REGEXPの場合は、REGEXPの結果を反転した結果(1なら0、0なら1)となります。

※ カラムの値又はパターンがNULLの場合はNULLを返します。またREGEXP演算子の別名としてRLIKE演算子も用意されています。

正規表現の構文は数多く用意されているため改めて別のページで一つ一つ確認します。

例えば次のように記述します。

SELECT * FROM menulist WHERE menu REGEXP '^(Hot|Ice)';

上記では「menu」カラムの値の先頭が'Hot' か 'Ice'から始まるデータを取得します。

BINARY演算子

文字列比較の時、デフォルトでは大文字と小文字を区別しません。区別を行いたい場合はBINARY演算子を指定します。

WHERE col_name REGEXP BINARY pattern

例えば次のように記述します。

SELECT * FROM menulist WHERE menu REGEXP '^(Hot|Ice)';

上記では「menu」カラムの値の先頭が'Hot' か 'Ice'から始まるデータにはマッチしますが'hot'や'HOT'から始まるデータにはマッチしません。

サンプル

実際に試してみます。まず次のようなテーブルを作成します。

mysql> create table menulist(menu varchar(20), price int);

p8-1

テーブルには次のようなデータを追加してあります。

p8-2

では「menu」カラムの値の先頭が'hot' か 'ice'から始まるデータを取得します。

mysql> select * from menulist where menu regexp '^(hot|ice)';

p8-3

デフォルトでは大文字と小文字を区別しませんので'Hot'や'Ice'で始まるデータにマッチしています。また'Hot'や'Ice'が含まれていても値の先頭にない'Hamburger and Hot'にはマッチしません。

( Written by Tatsuo Ikura )