【Oracle】TRANSLATE で文字列を1文字ずつ置換する

文字列を置換するTRANSLATE

Oracleで文字列を置換するには「TRANSLATE」を使います。

同じ置換に「REPLACE」もありますが、微妙に違います。

構文

TRANSLATE(文字列, 置換前文字列, 置換後文字列)
  • 指定された文字列の中に存在する置換前文字列を置換後文字列で置換します
  • 置換は1文字毎に置換します

 

例1. TRANSLATEで文字列を置換するパターン

--文字列「SATOU」を「KATOU」にTRANSLATEで置換する
SELECT TRANSLATE('SATOU','S','K') FROM DUAL;
[結果] 
'KATOU'

ここではTRANSLATEを使って「SATOU」の「S」→「K」に置換しました。文字列「SATOU」を「KATOU」に置換しました。

例2. TRANSLATEとREPLACEとの違い

--文字列「ABC」の「A→X」「C→Y」にTRANSLATEで置換する
SELECT TRANSLATE('ABC','AC','XY') FROM DUAL;
[結果] 
'XBY'

--REPLACEでは置換できない
SELECT REPLACE('ABC','AC','XY') FROM DUAL;
[結果] 
'ABC'

ここでは「TRANSLATE」を使って文字列「ABC」の「A」→「X」、「C」→「Y」に置換し、「XBY」にしました。

「TANSLATE」と似た置換関数に「REPLACE」がありますが、機能はやや違います。

「REPLACE」は連続する文字列を置換するのに対し、「TRANSLATE」は1文字毎に置換します。

ここでは同じことを「REPLACE」でやっても「ABC」となりました。「REPLACE」は「AC」を「XY」に置換しようとしても、連続する「AC」という文字列がないため置換できないのです。

例3. TRANSLATEで文字列を置換できないパターン

--置換対象がない
SELECT TRANSLATE('ABC','EF','XY') FROM DUAL;
[結果] 
'ABC'

「ABC」には「E、F」が含まれないので「X、Y」には置換されませんでした。置換する対象がない場合はそのままの文字列が返ってきます。

「TRANSLATE」で文字列を置換するパターンを3つ取りあげました。

以上、Oracleで文字列を置換するTRANSLATEでした。

 

コメント