だらだらやるよ。

こげつのIT技術メモ

DB内の項目の半角全角を変換する。

年末アップしようと思って忘れてたので。
postgresqlのtranslate関数は、複数の文字を変換することができるので、
1文字対1文字の変換であれば、文字に限らず数字アルファベットも1文ですべて変換してしまうことができます。


問題は濁点、半濁点まじりの文字の場合。
これは1文字対1文字の置き換えではないので、replace関数を順番に適用していくしかないです。
この際注意しないといけないのが、WHERE句の指定で、これが無いとすべての行に対してUPDATEが走ってしまうので、
件数が2桁万件くらいになるとpostgresqlの場合パフォーマンスで問題が出ます。
というわけでコピペ用コードは以下。[table_name]、[column_name]を適切なテーブル名とカラム名に置き換えてくださいな。

UPDATE [table_name] SET [column_name] = replace([column_name],'ガ','ガ') WHERE [column_name] LIKE '%ガ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ギ','ギ') WHERE [column_name] LIKE '%ギ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'グ','グ') WHERE [column_name] LIKE '%グ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ゲ','ゲ') WHERE [column_name] LIKE '%ゲ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ゴ','ゴ') WHERE [column_name] LIKE '%ゴ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ザ','ザ') WHERE [column_name] LIKE '%ザ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ジ','ジ') WHERE [column_name] LIKE '%ジ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ズ','ズ') WHERE [column_name] LIKE '%ズ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ゼ','ゼ') WHERE [column_name] LIKE '%ゼ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ゾ','ゾ') WHERE [column_name] LIKE '%ゾ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ダ','ダ') WHERE [column_name] LIKE '%ダ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ヂ','ヂ') WHERE [column_name] LIKE '%ヂ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ヅ','ヅ') WHERE [column_name] LIKE '%ヅ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'デ','デ') WHERE [column_name] LIKE '%デ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ド','ド') WHERE [column_name] LIKE '%ド%';
UPDATE [table_name] SET [column_name] = replace([column_name],'バ','バ') WHERE [column_name] LIKE '%バ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ビ','ビ') WHERE [column_name] LIKE '%ビ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ブ','ブ') WHERE [column_name] LIKE '%ブ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ベ','ベ') WHERE [column_name] LIKE '%ベ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ボ','ボ') WHERE [column_name] LIKE '%ボ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'パ','パ') WHERE [column_name] LIKE '%パ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ピ','ピ') WHERE [column_name] LIKE '%ピ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'プ','プ') WHERE [column_name] LIKE '%プ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ペ','ペ') WHERE [column_name] LIKE '%ペ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ポ','ポ') WHERE [column_name] LIKE '%ポ%';
UPDATE [table_name] SET [column_name] = replace([column_name],'ヴ','ヴ') WHERE [column_name] LIKE '%ヴ%';
UPDATE [table_name] SET [column_name] = translate([column_name],'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン','アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン');

これってmysqlとかsqlserverとかやったらどうなるんだろう?
簡単関数あるのだろうか!