2019.9.26
2020.1.7

「ヴァ」や「ヴィ」といった文字を「バ」や「ビ」に変換する方法(REPLACE、TRANSLATE)

他のシステムとの連携でCSV形式でデータの登録をしようとした時、全角カナの文字列を半角カナで出力しないといけない項目で、「ヴ」の文字が対応していなくて、エラーになったことがあります。

「ヴァ」は「バ」、「ヴィ」は「ビ」といったようにわざわざOracleで変換した上で、半角カナに変換して出力しなければいけなかったので、その時のメモです。

コード

「ヴ」が使わていて変換しなければいけない対象の文字は「ヴァ」「ヴィ」「ヴ」「ヴェ」「ヴォ」の5つ。

変換方法は「REPLACE」を使って以下のように行います。


SELECT 
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('ヴァヴィヴヴェヴォヴァヴォ', 'ヴァ', 'バ'), 'ヴィ', 'ビ'), 'ヴェ', 'ベ'), 'ヴォ', 'ボ'), 'ヴ', 'ブ')
FROM DUAL;

注意点としては、「ヴ」を一番最後に変換してやらないと、「ヴァ」の「ヴ」も対象になって、想定通りの結果にならないことです。

本当はもっとスマートに正規表現を使ってうまくできないかと思いましたが、できなさそうだったので、上記のようなコードになりました。

Oracleには「TRANSLATE」という関数があって、これを使うと、複数の文字を変換対象にすることができるのですが、TRANSLATEはあくまで1文字単位での対となるので、「ヴァ」のように対象が2文字のものを1文字に変換することはできませんでした。

TRANSLATEの使用例


SELECT 
TRANSLATE('aiueoao', 'ai', 'アイ')
FROM DUAL;

上記の例を実際に実行すると、「アイueoアo」という結果が返ってくるかと思います。

便利な関数ですが、ちょっと惜しいですね。

Oracle】関連記事