SQLの検索でよく使われる LIKE
句は便利ですが、複雑な条件指定には限界があります。
そこで強力な武器となるのが 正規表現(REGEXP)。
この記事では、基本的な使い方からよく使うパターン、さらに「SQLで利用できる正規表現の一覧」をまとめました。
1. REGEXPの基本構文
SQLでは REGEXP
を用いて文字列検索を行います。
2. 使用できる正規表現の一覧(MySQL準拠)
SQLで使える代表的な正規表現を整理しました。
※DBエンジンにより若干差異あり(MySQL、PostgreSQL、Oracleなど)
パターン | 意味 | 使用例 |
---|---|---|
^ | 行頭にマッチ | ^A → Aで始まる |
$ | 行末にマッチ | Z$ → Zで終わる |
. | 任意の1文字 | c.t → cat, cot, cut |
[...] | 文字クラス | [0-9] → 数字1文字 |
[^...] | 否定の文字クラス | [^0-9] → 数字以外 |
* | 0回以上の繰り返し | a* → "", a, aaa |
+ | 1回以上の繰り返し | a+ → a, aa |
? | 0回または1回 | colou?r → color, colour |
{n} | n回の繰り返し | [0-9]{4} → 4桁の数字 |
{n,} | n回以上の繰り返し | [0-9]{2,} → 2桁以上の数字 |
{n,m} | n〜m回の繰り返し | [A-Z]{2,5} → 2〜5文字の大文字 |
| | OR条件 | cat|dog → cat または dog |
() | グループ化 | (abc)+ → abc, abcabc |
[:digit:] | 数字 | [[:digit:]] → 0〜9 |
[:alpha:] | 英字 | [[:alpha:]] → A〜Z, a〜z |
[:alnum:] | 英数字 | [[:alnum:]] → 英数字 |
[:space:] | 空白文字 | [[:space:]] → 空白, 改行, タブ |
[:upper:] | 大文字 | [[:upper:]] → 大文字 |
[:lower:] | 小文字 | [[:lower:]] → 小文字 |
3. よく使う実践パターン
(1) 先頭・末尾の一致
(2) 日付フォーマット判定
(3) メールアドレス判定
(4) 商品コードの書式検証
(5) 拡張子フィルタ
4. REGEXPのメリットと注意点
メリット
-
複雑な条件をシンプルに表現できる
-
SQLの可読性が向上
-
データ品質チェックに有効
注意点
-
DBごとに正規表現エンジンが異なる(MySQL、PostgreSQL、Oracleで互換性に注意)
-
パフォーマンス低下の可能性があるため、大量データ処理時はインデックス設計と併用が望ましい
SQLでのREGEXPサポート比較(DBMSごと)
DBMS | REGEXPサポート | 演算子/関数例 | 備考 |
---|---|---|---|
MySQL | ◎ | REGEXP, REGEXP_REPLACE | 8.0以降はICUベース |
PostgreSQL | ◎ | ~, ~*, !~, !~* | 高度な正規表現OK |
Oracle | ◎ | REGEXP_LIKE, REGEXP_SUBSTR | POSIX互換 |
SQL Server | △ | (CLR関数経由) | ネイティブ未対応 |
SQLite | △ | REGEXP(要自作関数) | デフォルト非対応 |
BigQuery | ◎ | REGEXP_CONTAINS など | クラウドSQL |
Snowflake | ◎ | RLIKE, REGEXP | ほぼMySQL互換 |
まとめ
REGEXPを使えばSQLの検索が格段に柔軟になります。
一覧表を参考に、ログ解析やメール判定、コード検証などに応用してみてください。
「LIKEでは表現できない…」と思ったら、REGEXPの出番です!