半角全角関係のOracle ストアドファンクション

※2011.12.26 追記 最近のバージョンでは標準で用意されてるようです。コメントで教えて頂きました。

わかりやすさを優先してストアドファンクションにしていますが、パッケージにして、静的な変数を使ったほうが当然パフォーマンスはあがると思います。これは、Oracle9iで動くことは確認しました。

全角のアルファベット、数字を半角にする

CREATE OR REPLACE FUNCTION alnum2han(str in VARCHAR2) RETURN VARCHAR2
IS
tmp varchar2(2000);
BEGIN
tmp := translate(
str,
'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
);
RETURN tmp;
END alnum2han;
/
select alnum2han('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') from dual;

全角のアルファベット、数字を半角にして、半角カナを全角にして、他の記号もいい感じにする

CREATE OR REPLACE FUNCTION hanzen(str in VARCHAR2) RETURN VARCHAR2
IS
tmp varchar2(2000);
BEGIN
tmp := alnum2han(han2zen(str));
tmp := translate(
tmp,
'|=+?/@!”’#$%&;: ',
'|=+-/@!"''#$%&;: '
);
RETURN tmp;
END hanzen;
/
select hanzen(' ィァァィ<><>;:”()=!%$#’アイウエオカ|=+?/@!”’#$%&();:[]【】〔〕<>¥^キクケコザズゾざずぞザズダド1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') from dual;

半角全角関係のOracle ストアドファンクション」への2件のフィードバック

  1. この記事はOracle9iの頃の話なんです。最近のバージョンはそういうのがあるんですね。もうOracleを使うことはないので調べる気はないんですけど。

コメントは停止中です。