半角全角関係の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;

2 Comments

  • 11g
    2011年12月26日(月曜日) - 14:29 | Permalink

    TO_SINGLE_BYTE
    TO_MULTI_BYTE
    UTL_I18N.TRANSLITERATE
    では?

  • eight
    2011年12月26日(月曜日) - 14:35 | Permalink

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

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    *

    次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>