Oracle でひらがな・全角カタカナ・半角カタカナ変換
英数字の半角・全角変換は TO_SINGLE_BYTE
(半角化) や TO_MULTI_BYTE()
(全角化) で可能。これに UPPER()
(大文字化) や LOWER()
(小文字化) を組み合わせれば、LIKE
演算子であいまい検索が可能になる。
しかし、これらはひらがなやカタカナの変換は行ってくれない。
そこで、UTL_I18N
パッケージの TRANSLITERATE
ファンクションを併用する。
SELECT
UTL_I18N.TRANSLITERATE('アイウエおか', 'kana_fwkatakana')
FROM
DUAL;
こんな感じで、変換する文字列と変換モードを引数で指定する。引数の種類は以下などを参照。FW
は「Full Width」の略で全角、HW
は「Half Width」の略で半角、ってことが分かれば覚えやすいかな。
- 参考 : https://docs.oracle.com/cd/E16338_01/appdev.112/b56262/u_i18n.htm;title
- 参考 : 社内SEの徒然なる日記 SQL(Oracle)でカタカナを全角に変換!
前述の英数字の変換と合わせると、こんな感じであいまい検索に使えそう。
SELECT
NAME
FROM
USER_MASTER
WHERE
UTL_I18N.TRANSLITERATE( UPPER( TO_SINGLE_BYTE( NAME ) ), 'kana_fwkatakana') LIKE '%' || UTL_I18N.TRANSLITERATE( UPPER( TO_SINGLE_BYTE( /* 検索文字列 */ ) ), 'kana_fwkatakana') || '%'
;
検索対象のカラムと、検索文字列の両方を同じ形式に統一する、というワケだ。
スペースはまだ平気かと思うが、波ダッシュ (全角チルダ) とかハイフン・マイナス・ダッシュとかの解釈が組み合わせるプログラム側と合わないかもしれないので、よく見ながら使うことにする。
また、多少は性能劣化も起こるかもしれない。ご利用は計画的に。