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

PostgreSQL自作関数

説明

全角から半角へ変換する自作関数です。

自作関数を使わずSQLで変換する方法は一番下に記載しています。

 

 

引数

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

 

返り値

変換後の文字列

 

コード

CREATE OR REPLACE FUNCTION convert_full_to_half(c_full character varying)
  RETURNS character varying AS
$BODY$
declare
begin

	--アルファベットの変換
	c_full = translate(c_full,
	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
	'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
	);
	
	--数値の変換
	c_full = translate(c_full,
	'1234567890',
	'1234567890'
	);
		
	--カタカナ(濁音)
	c_full := replace(replace(replace(replace(replace(replace(c_full,'ヴ','ヴ' ),'ガ','ガ' ),'ギ','ギ' ),'グ','グ' ),'ゲ','ゲ' ),'ゴ','ゴ' );
	c_full := replace(replace(replace(replace(replace(c_full,'ザ','ザ' ),'ジ','ジ' ),'ズ','ズ' ),'ゼ','ゼ' ),'ゾ','ゾ' );
	c_full := replace(replace(replace(replace(replace(c_full,'ダ','ダ' ),'ヂ','ヂ' ),'ヅ','ヅ' ),'デ','デ' ),'ド','ド' );
	c_full := replace(replace(replace(replace(replace(c_full,'バ','バ' ),'ビ','ビ' ),'ブ','ブ' ),'ベ','ベ' ),'ボ','ボ' );
	c_full := replace(replace(replace(replace(replace(c_full,'パ','パ' ),'ピ','ピ' ),'プ','プ' ),'ペ','ペ' ),'ポ','ポ' );
	
	--カタカナ
	c_full = translate(c_full,
	'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ',
	'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォカケッャュョワ'
	);
	
	--記号
	c_full = translate(c_full,
	' !”#$%&()ー-=^~|@‘「[{;+:*」]}、,<。.>・/?_',
	' !"#$%&()ー-=^~|@`「[{;+:*」]}、,<。.>・/?_'
	);
	
	c_full := replace(c_full,'’','''' );
	c_full := replace(c_full,'¥',chr(92) );
	
	return c_full;

end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

※ PostgreSQL9.5 , 9.6 , 10 , 11 , 12 , 13で動作確認済み 自作関数の実行方法はこちら

 

実行例

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

 

 

(関数を使わず)SQLで変換する方法

上の関数を使わずSQLで変換する例です。

少し長いのと、カナの濁音には対応していませんのでご注意ください。

-- 全角から半角へ変換するSQL文です
select translate('ここに変換したい文字を入れる',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !”#$%&()ー-=^~|@‘「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !"#$%&()ー-=^~|@`「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォカケッャュョワ'
);

-- 実行例
select translate('Az#アワ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !”#$%&()ー-=^~|@‘「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォヵヶッャュョヮ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !"#$%&()ー-=^~|@`「[{;+:*」]}、,<。.>・/?_アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォカケッャュョワ'
);
-- "Az#アワ"