SQL Regular Expressions (Regex)の理解
James Reed
Infrastructure Engineer · Leapcell

Key Takeaways
- SQL regexは、クエリ内で高度かつ柔軟な文字列操作を可能にします。
- さまざまなSQL方言が、独自の構文と関数でregexをサポートしています。
- SQLでのregexの使用は、データ処理を効率化し、データ品質を向上させることができます。
SQLの正規表現(regex)は、強力なパターンマッチング機能を提供し、ユーザーがSQLクエリ内で複雑な文字列検索、検証、および操作を直接実行できるようにします。この記事では、SQL regexの基本、その構文、関数、およびさまざまなデータベースシステムでの実用的な応用について詳しく説明します。
SQLにおける正規表現とは何ですか?
正規表現は、検索パターンを定義する一連の文字です。SQLでは、regexを使用すると、LIKE
のような基本的な演算子を超える高度な文字列マッチングが可能になります。さまざまなSQL方言がregex機能をサポートしています。例:
- MySQL:
REGEXP
またはRLIKE
演算子。 - PostgreSQL:
~
、~*
、!~
、!~*
のようなPOSIX演算子。 - Oracle:
REGEXP_LIKE
、REGEXP_REPLACE
、REGEXP_INSTR
、およびREGEXP_SUBSTR
のような関数。 - SQL Server: バージョン2025以降、
REGEXP_LIKE
、REGEXP_REPLACE
、およびREGEXP_SUBSTR
のような関数がサポートされています。
SQLにおける一般的なRegexメタ文字
Regexは、メタ文字を利用して複雑な検索パターンを定義します。
.
: 任意の単一文字に一致します。*
: 直前の要素のゼロ回以上の出現に一致します。+
: 直前の要素の1回以上の出現に一致します。?
: 直前の要素のゼロ回または1回の出現に一致します。^
: 文字列の先頭に一致を固定します。$
: 文字列の末尾に一致を固定します。[abc]
: 角括弧内の任意の1つの文字に一致します。[^abc]
: 角括弧内にリストされていない任意の文字に一致します。{n}
: 直前の要素のn回の出現に正確に一致します。{m,n}
: 直前の要素のm回からn回の出現に一致します。|
: パターン間の論理ORとして機能します。
SQLの主要なRegex関数
1. REGEXP_LIKE
文字列が指定されたregexパターンに一致するかどうかを判断します。
例(Oracle):
SELECT * FROM employees WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');
このクエリは、有効なメール形式を持つすべての従業員レコードを取得します。
2. REGEXP_REPLACE
regexパターンに一致するサブストリングを、指定された置換で置き換えます。
例(MySQL):
SELECT REGEXP_REPLACE(phone_number, '[^0-9]', '') AS cleaned_number FROM contacts;
これにより、電話番号からすべての非数値文字が削除されます。
3. REGEXP_SUBSTR
regexパターンに一致するサブストリングを抽出します。
例(Oracle):
SELECT REGEXP_SUBSTR(email, '@[^.]+') AS domain FROM users;
これにより、メールアドレスからドメイン部分が抽出されます。
4. REGEXP_INSTR
regexパターンに一致するサブストリングの位置を返します。
例(Oracle):
SELECT REGEXP_INSTR('Contact: 123-456-7890', '[0-9]{3}-[0-9]{3}-[0-9]{4}') AS position FROM dual;
これにより、文字列内の電話番号パターンの開始位置が検索されます。
実用的な例
'Sa'で始まる文字列のマッチング
MySQL:
SELECT name FROM students WHERE name REGEXP '^Sa';
'Sarah'や'Samuel'など、'Sa'で始まる名前を取得します。
テキストからURLを抽出する
PostgreSQL:
SELECT REGEXP_SUBSTR(message, 'https?://[^ ]+') AS url FROM messages;
メッセージテキストからURLを抽出します。
メールアドレスの検証
Oracle:
SELECT email FROM users WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');
標準的なメール形式に一致するメールを選択します。
SQL方言間の考慮事項
- MySQL:
REGEXP
は大文字と小文字を区別しません。大文字と小文字を区別する場合はBINARY
を使用します。 - PostgreSQL:
~
(大文字と小文字を区別する)および~*
(大文字と小文字を区別しない)のような演算子でPOSIX regexをサポートします。 - Oracle:
REGEXP_LIKE
やREGEXP_REPLACE
のような関数で広範なregexサポートを提供します。 - SQL Server: バージョン2025で
REGEXP_LIKE
やREGEXP_REPLACE
を含むregex関数が導入されました。
結論
正規表現をSQLクエリに組み込むことで、データ検索と操作の機能が強化され、データベース内で直接高度なパターンマッチングと検証が可能になります。さまざまなSQL方言でregex関数を理解して利用することで、データ処理タスクを大幅に効率化できます。
FAQs
Regexは主にSQLクエリでの複雑な文字列マッチングと検証に使用されます。
ほとんどの主要なSQLデータベースはregexをサポートしていますが、構文と関数が異なる場合があります。
データベース内で直接、正確なデータ抽出、検証、および操作を可能にします。
Leapcellは、バックエンドプロジェクトをホストするための最良の選択肢です。
Leapcellは、ウェブホスティング、非同期タスク、およびRedisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い - リクエストも請求もありません。
比類なき費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポート。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムメトリックとロギング。
容易なスケーラビリティと高パフォーマンス
- 高同時実行を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください!
Xでフォローしてください:@LeapcellHQ