データベースの検索では、部分一致や特定のパターンに基づいた検索を行いたいことがあります。PostgreSQLでは、WHERE
句で正規表現を使用することで、より柔軟な検索が可能になります。例えば、次のようなケースがあります。
- ユーザー名が特定の文字から始まるデータを取得したい
- メールアドレスのドメインを特定したい
- 形式の正しい電話番号だけを検索したい
本記事では、PostgreSQLで WHERE
句に正規表現を使用する方法を基本から解説します。
PostgreSQLの正規表現演算子
PostgreSQLでは、WHERE
句で正規表現を使用するために、以下の4つの演算子が用意されています。
演算子 | 説明 |
---|---|
~ | 正規表現とマッチする(大文字・小文字を区別する) |
~* | 正規表現とマッチする(大文字・小文字を区別しない) |
!~ | 正規表現とマッチしない(大文字・小文字を区別する) |
!~* | 正規表現とマッチしない(大文字・小文字を区別しない) |
次の章では、これらの演算子を使った基本的な検索方法について解説します。
基本的な正規表現の使い方
指定した文字で始まるデータを検索
名前がアルファベットの大文字で始まるユーザーを検索する場合、次のように記述できます。
SELECT * FROM users WHERE name ~ '^[A-Z]';
^
は文字列の先頭を表し、[A-Z]
は大文字のアルファベット1文字を意味します。このクエリを実行すると、Alice
や Bob
はヒットしますが、alice
や 123John
はヒットしません。
大文字・小文字を区別せずに検索
~*
を使うと、大文字・小文字を区別せずに検索できます。
SELECT * FROM users WHERE name ~* 'john';
このクエリでは、John
、john
、JOHN
など、どの表記でもヒットします。
特定の文字列を含まないデータを検索
否定形の演算子 !~
や !~*
を使うと、指定したパターンに一致しないデータを取得できます。
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
句では、正規表現を使うことで柔軟な検索が可能になります。本記事では、基本的な演算子の使い方から実用的な応用例、パフォーマンス上の注意点まで解説しました。
正規表現を活用すれば、より柔軟なデータ検索ができるようになります。
ぜひ、実際のプロジェクトで試してみてください!
コメント