目次
まず、PostgreSQLで正規表現を使うには?
基本的には以下の形式でコマンドを書けばSQL内で正規表現が使えます。
select * from テーブル名 where カラム名 ~ '正規表現';
「~」の後ろに正規表現を記述する感じです。
先頭の文字列が特定の文字に一致するか判別する
例えば、先頭の文字列がA~Gのいずれかであるかを表現するには正規表現は以下のようになります。
'^[A-G]'
末尾の文字列が特定の文字に一致するか判別する
例えば、末尾の文字列が0~9のいずれかであるかを表現するには正規表現は以下のようになります。
'[0-9]$'
具体的なコード例
前提として以下のusersテーブルがあるとします。
id | name | like | age | address | gender | created_at | updated_at |
1 | 田中由美子 | tennis | 20 | 東京 | male | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
2 | 鈴木浩 | game | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
3 | 佐藤康明 | baseball | 19 | 神奈川 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
4 | 高橋洋子 | walking | 40 | 東京 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
5 | 田島翔太 | swimming | 16 | 東京 | male | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
likeカラム の先頭が「a~g」のいずれかであるデータ
select * users where like ~ '^[a-g]'
実行結果は以下のようになります。
id | name | like | age | address | gender | created_at | updated_at |
2 | 鈴木浩 | game | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
3 | 佐藤康明 | baseball | 19 | 神奈川 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
likeカラムの末尾が「a~g」のいずれかであるデータ
select * from users where like ~ '[a-g]$'
実行結果は以下のようになります。
id | name | like | age | address | gender | created_at | updated_at |
2 | 鈴木浩 | game | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
4 | 高橋洋子 | walking | 40 | 東京 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
5 | 田島翔太 | swimming | 16 | 東京 | male | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
likeカラムの先頭と末尾どちらも「a~g」のいずれかであるデータ
select * from users where like ~ '^[a-g].*[a-g]$'
「.」は改行文字以外の何らかの文字を表し、「*」は0回以上繰り返していることを表します。
そして、実行結果は以下のようになります。
id | name | like | age | address | gender | created_at | updated_at |
2 | 鈴木浩 | game | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |