Oracle 全角半角変換とひらがなカタカナ変換する方法

Oracle SQLで全角半角とひらがなカタカナを変換する方法です。

Oracle 全角半角変換とひらがなカタカナ変換する方法

全角と半角を変換したい場合って、だいたいがどちらかに合わせたい場合だと思います。例えば、なんたら番号は必ず半角で保存するとか、全角スペースの保存はNGなど、アプリケーション側の仕様によって左右されますね。一方、カタカナの変換となれば、旧システムから新システムへの移行やデータ連携などがあるでしょうか。昔の仕組みは半角カタカナが多用されていましたからね。新システムでは全角カタカナを使用するなんてのは、よく聞く話です。

ここでは 「Oracleで全角半角を変換する方法」と、「Oracleでひらがなからカタカナへ変換する方法」を紹介します。


環境

Oracleで全角半角を変換する方法

Oracleで全角半角を変換するには TO_MULTI_BYTE、TO_SINGLE_BYTE 関数を使います。

文法説明
TO_MULTI_BYTE(文字列)半角英数字を全角英数字に変換します。カタカナの変換と、AL16UTF16などのマルチバイトアスキーコードは変換されません。
TO_SINGLE_BYTE(文字列)全角英数字を半角英数字に変換します。 カタカナの変換と、AL16UTF16などのマルチバイトアスキーコードは変換されません。

早速使ってみましょう。

select TO_SINGLE_BYTE('SAKA-EN,saka-en、サカエン 123') from DUAL
union all
select TO_MULTI_BYTE('SAKA-EN,saka-en、サカエン 123') from DUAL

結果はこうなります。

SAKA-EN,saka-en、サカエン 123
SAKA-EN,saka-en、サカエン 123

全角英数字は半角英数字に、半角英数字は全角英数字に変換されています。カタカナは対象外です。「,」コンマは変換されますが、「、」読点は変換されません。「 」スペースは半角全角変換されています。

Oracleでひらがなカタカナ変換する方法

Oracle 10g R2 から UTL_I18N パッケージ にて、TRANSLITERATE という文字列変換用の関数が用意されています。

文法説明
UTL_I18N.TRANSLITERATE(文字列,変換用定数)ひらがなとカタカナを変換します。全角半角の変換も可能です。

第二引数に設定する定数には、以下のような種類があります。

第二引数説明
fwkatakana_hiragana全角カタカナのみを全角ひらがなに変換します。
fwkatakana_hwkatakana全角カタカナのみを半角カタカナに変換します。
hiragana_fwkatakana全角ひらがなのみを全角カタカナに変換します。
hiragana_hwkatakana全角ひらがなのみを半角カタカナに変換します。
hwkatakana_fwkatakana半角カタカナのみを全角カタカナに変換します。
hwkatakana_hiragana半角カタカナのみを全角ひらがなに変換します。
kana_fwkatakanaすべてのタイプの仮名文字を全角カタカナに変換します。
kana_hiraganaすべてのタイプの仮名文字を全角ひらがなに変換します。
kana_hwkatakanaすべてのタイプの仮名文字を半角カタカナに変換します。

早速使ってみましょう。ベースとなる文字列は「サカエン,サカエン、さかえん」です。全角カタカナ、半角カタカナ、ひらがなの順番でならんでいます。

select UTL_I18N.TRANSLITERATE('fwkatakana_hiragana: サカエン,サカエン、さかえん', 'fwkatakana_hiragana') from DUAL
union
select UTL_I18N.TRANSLITERATE('fwkatakana_hwkatakana: サカエン,サカエン、さかえん', 'fwkatakana_hwkatakana') from DUAL
union
select UTL_I18N.TRANSLITERATE('hiragana_fwkatakana: サカエン,サカエン、さかえん', 'hiragana_fwkatakana') from DUAL
union
select UTL_I18N.TRANSLITERATE('hiragana_hwkatakana: サカエン,サカエン、さかえん', 'hiragana_hwkatakana') from DUAL
union
select UTL_I18N.TRANSLITERATE('hwkatakana_fwkatakana: サカエン,サカエン、さかえん', 'hwkatakana_fwkatakana') from DUAL
union
select UTL_I18N.TRANSLITERATE('hwkatakana_hiragana: サカエン,サカエン、さかえん', 'hwkatakana_hiragana') from DUAL
union
select UTL_I18N.TRANSLITERATE('kana_fwkatakana: サカエン,サカエン、さかえん', 'kana_fwkatakana') from DUAL
union
select UTL_I18N.TRANSLITERATE('kana_hiragana: サカエン,サカエン、さかえん', 'kana_hiragana') from DUAL
union
select UTL_I18N.TRANSLITERATE('kana_hwkatakana: サカエン,サカエン、さかえん', 'kana_hwkatakana') from DUAL

結果はこうなりました。

fwkatakana_hiragana: さかえん,サカエン、さかえん
fwkatakana_hwkatakana: サカエン,サカエン、さかえん
hiragana_fwkatakana: サカエン,サカエン、サカエン
hiragana_hwkatakana: サカエン,サカエン、サカエン
hwkatakana_fwkatakana: サカエン,サカエン、さかえん
hwkatakana_hiragana: サカエン,さかえん、さかえん
kana_fwkatakana: サカエン,サカエン、サカエン
kana_hiragana: さかえん,さかえん、さかえん
kana_hwkatakana: サカエン,サカエン、サカエン

ふむ、なるほど。「,」コンマや、「、」読点の変換は一切おこなわれませんでしたね。

参考サイト

まとめ

Oracle SQLで全角半角とひらがなカタカナを変換する方法を紹介しました。

SQLで全角・半角の変換が必要な場合って、データ移行やデータ連携、分析とかがほとんどだと思います。Webアプリケーションに限らず、入力画面があるシステムでは画面系でバリデーションチェックしてから保存するのが一般的ですからね。

レガシーシステムでは、半角カタカナが多用されていました。会社名、氏名、住所などで利用されているため、データ連携では苦労したという話をよく聞きますし、私も過去に関わった経験があり、濁点や半濁点の扱いには苦労したものです。

世の中にはまだまだそういった仕組みがあると思いますが、できるだけ変換しなくてもすむような設計をしていきたいですね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。