【PostgreSQL】正規表現で先頭と末尾の文字列を一致させるには?

PostgreSQL

まず、PostgreSQLで正規表現を使うには?

基本的には以下の形式でコマンドを書けばSQL内で正規表現が使えます。

select * from テーブル名 where カラム名 ~ '正規表現';

「~」の後ろに正規表現を記述する感じです。

先頭の文字列が特定の文字に一致するか判別する

例えば、先頭の文字列がA~Gのいずれかであるかを表現するには正規表現は以下のようになります。

'^[A-G]'

末尾の文字列が特定の文字に一致するか判別する

例えば、末尾の文字列が0~9のいずれかであるかを表現するには正規表現は以下のようになります。

'[0-9]$'

具体的なコード例

前提として以下のusersテーブルがあるとします。

idnamelikeageaddressgendercreated_atupdated_at
1田中由美子tennis20東京male2021-10-09 05:11:052021-10-09 05:11:05
2鈴木浩game34千葉female2021-10-09 05:11:052021-10-09 05:11:05
3佐藤康明baseball19神奈川female2021-10-09 05:11:052021-10-09 05:11:05
4高橋洋子walking40東京female2021-10-09 05:11:052021-10-09 05:11:05
5田島翔太swimming16東京male2021-10-09 05:11:052021-10-09 05:11:05

likeカラム の先頭が「a~g」のいずれかであるデータ

select * users where like ~ '^[a-g]'

実行結果は以下のようになります。

idnamelikeageaddressgendercreated_atupdated_at
2鈴木浩game34千葉female2021-10-09 05:11:052021-10-09 05:11:05
3佐藤康明baseball19神奈川female2021-10-09 05:11:052021-10-09 05:11:05

likeカラムの末尾が「a~g」のいずれかであるデータ

select * from users where like ~ '[a-g]$'

実行結果は以下のようになります。

idnamelikeageaddressgendercreated_atupdated_at
2鈴木浩game34千葉female2021-10-09 05:11:052021-10-09 05:11:05
4高橋洋子walking40東京female2021-10-09 05:11:052021-10-09 05:11:05
5田島翔太swimming16東京male2021-10-09 05:11:052021-10-09 05:11:05

likeカラムの先頭と末尾どちらも「a~g」のいずれかであるデータ

select * from users where like ~ '^[a-g].*[a-g]$'

「.」は改行文字以外の何らかの文字を表し、「*」は0回以上繰り返していることを表します。

そして、実行結果は以下のようになります。

idnamelikeageaddressgendercreated_atupdated_at
2鈴木浩game34千葉female2021-10-09 05:11:052021-10-09 05:11:05
タイトルとURLをコピーしました