Oracle SQL 関数 : TRANSLATE : 文字列置換
charRet := TRANSLATE( charSrc , strSearch , strTranslate ); TRANSLATEは文字データcharSrcを先頭からサーチし、文字列strSearchと一致する文字があった場合に 変換文字列strTranslateの対応する文字に置換します。 strTranslateがstrSearchより短い場合は、strSearchに対応する文字を削除します。
SQL> SELECT 2 TRANSLATE('1234321', '123', 'ABC') AS TEST1 /* 1⇒A, 2⇒B, 3⇒C */ 3 ,TRANSLATE('1234321', '123', 'AB') AS TEST2 /* 1⇒A, 2⇒B, 3⇒削除 */ 4 ,TRANSLATE('1234321', '12', 'ABC') AS TEST3 /* 1⇒A, 2⇒B*/ 5 ,TRANSLATE('あいうえお', 'あいう', 'AB') AS TEST4 /* あ⇒A, い⇒B, う⇒削除 */ 6 ,TRANSLATE('ABCDE', 'ABC', 'あい') AS TEST5 /* A⇒あ, B⇒い, C⇒削除 */ 7 FROM DUAL; TEST1 TEST2 TEST3 TEST4 TEST5 ------- ----- ------- ------ ------ ABC4CBA AB4BA AB343BA ABえお あいDE
TRANSLATEの注意点は、取扱が文字単位でありバイト単位ではないことです。上の例からも分かる様に、
シングルバイト文字とマルチバイト文字との変換が可能です。
但し、1文字単位での処理のため、「ダヂヅデド」などの半角の濁音文字を「ダヂヅデド」全角文字に変換するには
1回のTRANSLATEでは不可能ですので、PL/SQLで自分で関数を作るしかないかもしれません。