POSTGRESでカラム内の値の一部を置換したい時のSQL
そういえばこれってどうやるんだっけ?シリーズ
特定の文字列を抽出する場合
テーブルから特定の文字列を含むレコードを抽出するSQLは皆さんご存知の通りかと思います。
完全一致の場合は以下の通り
SELECT * FROM [テーブル名] WHERE [カラム名] = "特定の文字列";
部分一致の場合は以下の通り
SELECT * FROM [テーブル名] WHERE [カラム名] LIKE "%特定の文字列%";
SQLの基本中の基本なので大丈夫だと思います。
特定の文字列を置換する場合
では対象の文字列を置換したい場合はどうするか?
完全一致の場合はWHERE句で抽出したレコードの指定カラムを置き換えるだけなので簡単です。
UPDATE [テーブル名] SET [カラム名] = "特定の文字列" WHERE [カラム名] = "置換したい文字列";
カラムの値に含まれている文字列を置換したい場合
例えば MOJI というカラムに AAA_BBB_CCC という値が入っていて、その中身のBBBをDDDに置換したい時の書き方です。
UPDATE [テーブル名] SET MOJI = REPLACE(MOJI, 'BBB', 'DDD') WHERE MOJI LIKE '%BBB%';
MOJI = REPLACE(MOJI, 'BBB', 'DDD')
上記で対象レコードのMOJIカラムのBBBをDDDに置換する命令になります。
WHERE MOJI LIKE '%BBB%'
上記でMOJIカラムにBBBを含むレコードを対象として抽出しています。
日本語で書くと「MOJIカラムにBBBを含むレコードを抽出して、そのレコードのMOJIカラムのBBBをDDDに置き換えてください」という感じ。SQLはやりたいことを文章にすればだいたい通じてくれるのが賢いですね。
書式としては以下の通りになります。
UPDATE [テーブル名] SET [カラム名] = REPLACE([カラム名], '特定の文字列', '置換する文字列') WHERE [カラム名] LIKE '%特定の文字列%';
私の記事では仕事中にどハマりしたエラーの対処方法や、あまり使わないために忘れてしまったSQLなどを中心に書いていきます。主にPHP、Javascript(jquery)、postgres SQLを取り扱っていきますのでよろしくお願いします。