データのあいまい検索では「LIKE」句が用いられます。
「LIKE」句では簡単なパターン検索が可能ですが、より複雑な文字列条件で検索したい場合には、正規表現を使うのがおすすめです。
Table of Contents
1. 正規表現検索とは
正規表現とは、文字列のパターンを表現するための特別な記述方法です。
SQLにおいても、データベースによっては正規表現による検索がサポートされています。
2. 主な正規表現検索の方法
データベースごとによって使用する関数・演算子が異なります。以下がその例です。
・MySQL ⇒ 「REGEXP」 、 「RLIKE」
・PostgreSQL ⇒ 「~」 、 「~*」 演算子
・Oracle ⇒ 「REGEXP_LIKE」
3. データベース別 正規表現の使用例
ここでは、例として以下の「users」テーブルを使用します。
・users
id | name | |
---|---|---|
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)」の意味です。
実行結果
id | name | |
---|---|---|
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」では難しい複雑な文字列パターンも検索できる。
- 使用できる関数や演算子はデータベースごとに異なるため注意が必要。
- パターン指定を工夫すれば、より効率的かつ柔軟な検索が可能になる。