【PostgreSQL】WHERE句に正規表現を使う方法を解説!

スポンサーリンク

データベースの検索では、部分一致や特定のパターンに基づいた検索を行いたいことがあります。PostgreSQLでは、WHERE 句で正規表現を使用することで、より柔軟な検索が可能になります。例えば、次のようなケースがあります。

  • ユーザー名が特定の文字から始まるデータを取得したい
  • メールアドレスのドメインを特定したい
  • 形式の正しい電話番号だけを検索したい

本記事では、PostgreSQLで WHERE 句に正規表現を使用する方法を基本から解説します。

PostgreSQLの正規表現演算子

PostgreSQLでは、WHERE 句で正規表現を使用するために、以下の4つの演算子が用意されています。

演算子説明
~正規表現とマッチする(大文字・小文字を区別する)
~*正規表現とマッチする(大文字・小文字を区別しない)
!~正規表現とマッチしない(大文字・小文字を区別する)
!~*正規表現とマッチしない(大文字・小文字を区別しない)

次の章では、これらの演算子を使った基本的な検索方法について解説します。

基本的な正規表現の使い方

指定した文字で始まるデータを検索

名前がアルファベットの大文字で始まるユーザーを検索する場合、次のように記述できます。

SELECT * FROM users WHERE name ~ '^[A-Z]';

^ は文字列の先頭を表し、[A-Z] は大文字のアルファベット1文字を意味します。このクエリを実行すると、AliceBob はヒットしますが、alice123John はヒットしません。

大文字・小文字を区別せずに検索

~* を使うと、大文字・小文字を区別せずに検索できます。

SELECT * FROM users WHERE name ~* 'john';

このクエリでは、JohnjohnJOHN など、どの表記でもヒットします。

特定の文字列を含まないデータを検索

否定形の演算子 !~!~* を使うと、指定したパターンに一致しないデータを取得できます。

SELECT * FROM users WHERE name !~* 'test';

このクエリでは、名前に test を含まないユーザーのみが取得されます。

実用的な応用例

メールアドレスの形式チェック

メールアドレスのフォーマットが正しいデータのみを取得するには、以下のようなクエリを使用できます。

SELECT * FROM users WHERE email ~ '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

この正規表現は、一般的なメールアドレスの形式を満たしているかをチェックします。

特定のドメインのメールアドレスを取得

特定のドメイン(例: example.com)のメールアドレスを持つユーザーを検索するには、以下のように記述します。

SELECT * FROM users WHERE email ~ '@example\.com$';

$ は文字列の末尾を表し、\. はドット . をエスケープしています。

電話番号のフォーマットチェック

電話番号が 000-0000-0000 の形式になっているかを確認するには、以下のようなクエリを使用できます。

SELECT * FROM contacts WHERE phone ~ '^\d{3}-\d{4}-\d{4}$';

\d{3} は3桁の数字、\d{4} は4桁の数字を表します。

まとめ

PostgreSQLのWHERE句では、正規表現を使うことで柔軟な検索が可能になります。本記事では、基本的な演算子の使い方から実用的な応用例、パフォーマンス上の注意点まで解説しました。

正規表現を活用すれば、より柔軟なデータ検索ができるようになります。
ぜひ、実際のプロジェクトで試してみてください!

コメント