MySQLでレコード内の文字列を置き換えてくれる便利なREPLACE関数

MySQLだけではなく、PostgreSQLやOracleでも使える便利な関数なので、ご紹介します。

まずは結論から、下記REPLACE関数を使って文字列を置き換えるSQLです。

UPDATE テーブル名 SET カラム名=REPLACE(カラム名, "この文字を!", "この文字に置き換えてやる!") WHERE id=8;

後輩のPHPプログラマーが、MySQLの文字列置換処理をするロジックを書いていたのですが、

一度SELECTでフィールドを取得した後に、PHPのstr_replace関数を使って置換後に、UPDATE文を再度発行するという処理内容だった。

「最近の若いもんわぁSQLも書けねぇ」と愚痴を言いつつ、フレームワークに頼り過ぎだぞ的な説教をうざったく言っている自分に嫌悪感を抱いたりと。。。
まぁそういうわけで「REPLACE関数」の説明です。

※REPLACE関数の注意点としては、アルファベット大文字と小文字を区別してしまう完全一致なので、
「TEST」「Test」「test」みないな文字列を「テスト」に置き換えたい場合は、予め大文字に統一するなどの工夫が必要です。

全てのフィールドに登録されてあるレコードを置換して更新する場合は

UPDATE テーブル名 SET カラム名=REPLACE(カラム名, "この文字を!", "この文字に置き換えてやる!");

また、なかなか使うシーンが無いですが、SELECT文によりフィールド取得する際に置換後の結果が欲しい場合にも使えます。

//フィールドを取得するときのみ文字列を置き換える場合
SELECT id,replace(カラム名, "この文字を!", "この文字に置き換えてやる!") as hoge FROM access_logs;