【PostgreSQL】半角から全角へ変換する

2020年6月21日

スポンサーリンク

説明

半角から全角へ変換する。

 

引数

引数1(character varying):変換する文字列

 

返り値

変換後の文字列

 

コード

CREATE OR REPLACE FUNCTION convert_half_to_full(character varying)
  RETURNS character varying AS
$BODY$
declare

	c_half	alias for $1;      --引数:置換する文字列

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;
ALTER FUNCTION convert_half_to_full(character varying)
  OWNER TO postgres;

※PostgreSQL12で動作確認済み

 

実行例

select * From convert_half_to_full('xyz890ュョワゴドボ/?_''\'); 
--【結果】:xyz890ュョワゴドボ/?_’¥

 

他にもこんな関数があります(文字列操作の関数)

文字列をバイト数で計算する

ひらがなをカタカナに置換する

カンマ区切り文字列の指定カンマ箇所を取得する

文字を左のX文字目から○文字切り取る(Mid関数)

文字列中に指定した文字が含まれるかのチェック