【MySQL】データの一部を一括で置換する REPLACE関数

MySQL
例えばこんなデータがあったとして。



id title url
1 sample ページ 1 http://hoge.com/sample1
2 sample ページ 2 http://hoge.com/sample2


http:// で始まっているURLを一括で https:// で始まるURLに置き換えたい。どんなときどうするか。

スクリプトを作成すればより複雑な処理も行えますが、この程度の簡単な置換であれば MySQLの関数を利用してクエリだけで処理するのが一番簡単で早いです。


クエリ例

UPDATE posts
SET url = REPLACE(url,'http://','https://');


これだけで一括で置換されます。簡単。



注意点

とにかく一括置換されます

例えば、

http://hoge.com/sample?target=http://fuga.jp/hehe

という値があったら、こう置換されます。

https://hoge.com/sample?target=https://fuga.jp/hehe

これが便利なときもあるでしょうしケースバイケースですが、長いテキストなどを置換するときには注意が必要です。


正規表現は使えない

MySQLにももちろん正規表現を使った検索用の関数はありますが、REPLACE関数とは一緒に使えません。正規表現を使って置き換えたい場合は、PHPなどスクリプトを作成する必要があります。


バックアップを忘れずに

ローカル環境でいろいろとテストしているときにうっかりしてこんな感じのクエリを叩いてしまいました。

UPDATE posts
SET title = REPLACE(url,'http://','https://');

結果、titleにurlが挿入されてしまいました。
本当はこうしたかったんですよ。

UPDATE posts
SET title = REPLACE(title,'なぜなんですか','なんでやねん');


中途半端にコピペした自分が悪いのですが、ローカル環境で良かった……破壊力が大きいので利用には十分注意しましょう。ぶっちゃけスクリプトを書いた方が安全です。便利ですけどね。