【SQL】全項目(カラム)に対して置換などの処理を行いたい
全てのカラムに対して同じ条件で文字列の一括置換を行いたい場合ありますよね?
UPDATEコマンドは、たとえSETする値が同じでも、一つ一つのカラムに対して値を記述しなくてはいけません。面倒なのでシェルスクリプトで自動化しましょう。
以下は、全カラムのhogeをfugaに置換する例です。
DB名、およびテーブル名の部分は適当に読み替えてください。
PostgreSQL + bashでテストしていますが、おそらくMySQLなどでも動作するかと。
#!/bin/sh psql -t -c "SELECT column_name FROM information_schema.columns WHERE table_catalog='DB名' AND table_name='テーブル名' AND (data_type='character' OR data_type='character varying') order by ordinal_position" DB名 | while read col_name do if [[ -z "${col_name}" ]] ; then //最後の空行を読み飛ばす continue fi echo "--${col_name}--" psql -c "UPDATE テーブル名 SET ${col_name} = REPLACE(${col_name} ,'hoge', 'fuga') WHERE ${col_name} LIKE '%hoge%'" DB名 done