最近仕事で行ったDB操作の中で使った便利な関数のメモ。

大量のレコードに対して、複雑な条件でデータを一括置換する必要があったのだが、そんな時に便利なのが正規表現。

PostgreSQLにはregexp_replaceという便利な関数が用意されており、これを使って思い通りの条件で一括置換をすることができた。

regexp_replace関数の使い方

regexp_replace関数が取る引数は次のとおり。

regexp_replace(string text, pattern text, replacement text [, flags text])

テーブルのデータに対し、一括置換をかける場合は次のようなSQLとなる。

UPDATE table_name
SET col_name = REGEXP_REPLACE(col_name, 'ここに正規表現の条件を書く', '置換文字')
;

また、正規表現でマッチした部分を置換文字内で使う場合は「\\」バックスラッシュを二つ書く必要があるので注意が必要。

REGEXP_REPLACE('hogehoge', 'h(.)g(.)', 'H\\1G\\2')
// 置換結果
// HoGeHoGe