データのあいまい検索では「LIKE」句が用いられます。
「LIKE」句では簡単なパターン検索が可能ですが、より複雑な文字列条件で検索したい場合には、正規表現を使うのがおすすめです。

1. 正規表現検索とは

正規表現とは、文字列のパターンを表現するための特別な記述方法です。
SQLにおいても、データベースによっては正規表現による検索がサポートされています。

2. 主な正規表現検索の方法

データベースごとによって使用する関数・演算子が異なります。以下がその例です。

・MySQL ⇒ 「REGEXP」 、 「RLIKE」
・PostgreSQL ⇒ 「~」 、 「~*」 演算子
・Oracle ⇒ 「REGEXP_LIKE」

3. データベース別 正規表現の使用例

ここでは、例として以下の「users」テーブルを使用します。

・users

idnameemail
1田中太郎taro.tanaka@example.com
2佐藤花子hanako.sato@example.com
3鈴木一郎ichiro.suzuki@example.com
4高橋三郎saburo.takahashi@test.com
5渡辺二郎jiro.watanabe@example.jp

●MySQLの場合(REGEXP)

name(=名前)が「太郎」または「三郎」で終わるデータを検索する場合は以下となります。

SELECT * FROM users WHERE name REGEXP '太郎$|三郎$';
  • $ は「文字列の末尾」を意味します。
  • | は「または(OR)」の意味です。

実行結果

idnameemail
1田中太郎taro.tanaka@example.com
4高橋三郎saburo.takahashi@test.com

●PostgreSQLの場合(~演算子)

同じ条件をPostgreSQLの場合は、次のようになります。

SELECT * FROM users WHERE name ~ '太郎$|三郎$';
  • ~ は大文字・小文字を区別する正規表現マッチングを意味します。
  • ~* を使えば、大文字・小文字を区別しないマッチングになります。

●Oracleの場合(REGEXP_LIKE)

Oracleでは、REGEXP_LIKE関数を使用します。

SELECT * FROM users WHERE REGEXP_LIKE(name, '太郎$|三郎$');
  • REGEXP_LIKE(カラム名, 'パターン') の形式で記述します。

4. 正規表現で使われる主な記号

記号意味
.任意の1文字
*直前の文字が0回以上繰り返される
+直前の文字が1回以上繰り返される
?直前の文字が0回または1回出現
[]文字クラス(例:[abc]はaまたはbまたはc)
^文字列の先頭
$文字列の末尾

これらを組み合わせることで、非常に細かい条件でデータを抽出することが可能です。

まとめ

  • 正規表現を使うと、「LIKE」では難しい複雑な文字列パターンも検索できる。
  • 使用できる関数や演算子はデータベースごとに異なるため注意が必要。
  • パターン指定を工夫すれば、より効率的かつ柔軟な検索が可能になる。