【PostgreSQL】半角から全角へ変換する
説明
半角から全角へ変換する自作関数です。
自作関数を使わずSQLで変換する方法は一番下に記載しています。
あわせて読みたい
反対の全角→半角への変換はこちらです
引数
引数1(character varying):変換する文字列
返り値
変換後の文字列
コード
この関数はコピー&貼り付けで実行できます。
CREATE OR REPLACE FUNCTION convert_half_to_full(c_half character varying)
RETURNS character varying AS
$BODY$
declare
begin
--アルファベットの変換
c_half = translate(c_half,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
);
--数値
c_half = translate(c_half,
'1234567890',
'1234567890'
);
--カタカナ(濁音)
c_half := replace(replace(replace(replace(replace(replace(c_half,'ヴ','ヴ' ),'ガ','ガ' ),'ギ','ギ' ),'グ','グ' ),'ゲ','ゲ' ),'ゴ','ゴ' );
c_half := replace(replace(replace(replace(replace(c_half,'ザ','ザ' ),'ジ','ジ' ),'ズ','ズ' ),'ゼ','ゼ' ),'ゾ','ゾ' );
c_half := replace(replace(replace(replace(replace(c_half,'ダ','ダ' ),'ヂ','ヂ' ),'ヅ','ヅ' ),'デ','デ' ),'ド','ド' );
c_half := replace(replace(replace(replace(replace(c_half,'バ','バ' ),'ビ','ビ' ),'ブ','ブ' ),'ベ','ベ' ),'ボ','ボ' );
c_half := replace(replace(replace(replace(replace(c_half,'パ','パ' ),'ピ','ピ' ),'プ','プ' ),'ペ','ペ' ),'ポ','ポ' );
--カタカナ
c_half = translate(c_half,
'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォカケッャュョワ',
'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ'
);
--記号
c_half = translate(c_half,
' !"#$%&()ー-=^~|@`「[{;+:*」]}、,<。.>・/?_',
' !”#$%&()ー-=^~|@‘「[{;+:*」]}、,<。.>・/?_'
);
c_half := replace(c_half,'''','’' );
c_half := replace(c_half,chr(92),'¥' );
return c_half;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
※ PostgreSQL9.5 , 9.6 , 10 , 11 , 12 , 13で動作確認済み 自作関数の実行方法はこちら
実行例
select * From convert_half_to_full('xyz890ュョアイウガギ/?_''\');
--【結果】:xyz890ュョアイウガギ/?_’¥
(関数を使わず)SQLで変換する方法
上の関数を使わずSQLで変換する例です。
少し長いのと、カナの濁音には対応していませんのでご注意ください。
-- 半角から全角へ変換するSQL文です
select translate('ここに変換したい文字を入れる',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !"#$%&()ー-=^~|@`「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォカケッャュョワ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !”#$%&()ー-=^~|@‘「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ'
);
-- 実行例
select translate('Az#アワ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !"#$%&()ー-=^~|@`「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォカケッャュョワ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !”#$%&()ー-=^~|@‘「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ'
);
-- "Az#アワ"