Oracle 全角半角変換とひらがなカタカナ変換する方法
Oracle SQLで全角半角とひらがなカタカナを変換する方法です。
全角と半角を変換したい場合って、だいたいがどちらかに合わせたい場合だと思います。例えば、なんたら番号は必ず半角で保存するとか、全角スペースの保存はNGなど、アプリケーション側の仕様によって左右されますね。一方、カタカナの変換となれば、旧システムから新システムへの移行やデータ連携などがあるでしょうか。昔の仕組みは半角カタカナが多用されていましたからね。新システムでは全角カタカナを使用するなんてのは、よく聞く話です。
ここでは 「Oracleで全角半角を変換する方法」と、「Oracleでひらがなからカタカナへ変換する方法」を紹介します。
環境
Oracle 11g
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アプリケーションに限らず、入力画面があるシステムでは画面系でバリデーションチェックしてから保存するのが一般的ですからね。
レガシーシステムでは、半角カタカナが多用されていました。会社名、氏名、住所などで利用されているため、データ連携では苦労したという話をよく聞きますし、私も過去に関わった経験があり、濁点や半濁点の扱いには苦労したものです。
世の中にはまだまだそういった仕組みがあると思いますが、できるだけ変換しなくてもすむような設計をしていきたいですね。
おつかれさまでした。