8.7.2 TRANSLATE
対象データ中の任意の文字を置換します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数TRANSLATE::=TRANSLATE(対象データ,置換対象文字,置換後の文字) 対象データ::=値式 置換対象文字::=値式 置換後の文字::=値式
(2) 指定形式の説明
- 対象データ:
-
対象データを指定します。
指定規則を次に示します。
-
対象データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
対象データには,CHAR型またはVARCHAR型のデータを指定してください。
-
対象データには,?パラメタを単独で指定できません。
-
- 置換対象文字:
-
置換対象の文字を指定します。
指定規則を次に示します。
-
置換対象文字は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
置換対象文字に同じ文字を2つ以上指定した場合,最初に指定した置換対象文字を有効とします。
-
置換対象文字に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はVARCHAR(32000)になります。
-
- 置換後の文字:
-
置換後の文字を指定します。
指定規則を次に示します。
-
置換後の文字は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
置換後の文字に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はVARCHAR(32000)になります。
-
- ヒント
-
複数の文字を置換する場合,置換対象文字と置換後の文字の先頭からの文字位置が同じになるように指定します。例えば,Aをa,Bをb,Cをcに置換する場合,置換対象文字には'ABC',置換後の文字には'abc'と指定します。
スカラ関数TRANSLATEの実行結果の例を次に示します。
- (例)
-
文字列中のAをaに,Bをbに,Cをcに置換します。
TRANSLATE('AXBYCZ','ABC','abc') → 'aXbYcZ'
(3) 規則
-
実行結果のデータ型とデータ長を次の表に示します。
表8‒22 スカラ関数TRANSLATEの実行結果のデータ型とデータ長 対象データのデータ型とデータ長
実行結果のデータ型とデータ長
CHAR(n)
VARCHAR(n)
VARCHAR(n)
(凡例)n:対象データの最大長
-
置換した結果,実行結果のデータ長を超えた場合,エラーになります。そのため,実行結果のデータ長を大きくしたい場合は,スカラ関数CASTを使用して対象データのデータ長を変更してください。
- (例)
-
使用している文字コードはUnicode(UTF-8)とします。
C1列はVARCHAR(5)の列で,文字列'ABC'が格納されているとします。
TRANSLATE("C1",'ABC',' ') → エラー
上記の例の場合,TRANSLATEの実行結果のデータ長はVARCHAR(5)になるため,データ長不足によってエラーになります。
TRANSLATE(CAST("C1" AS VARCHAR(9)),'ABC',' ') → ' '
上記の例の場合,TRANSLATEの実行結果のデータ長はVARCHAR(9)になるため,エラーになりません。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
対象データ,置換対象文字,または置換後の文字がナル値の場合,実行結果はナル値になります。
-
対象データ中の置換対象文字を,置換後の文字に置換します。置換対象文字の指定にはない対象データ中の文字は置換されません。
-
置換後の文字数が,置換対象文字数より少ない場合,余分に指定されている置換対象文字が対象データ中に存在するときは,対象データ中からその置換対象文字を取り除きます。
(例)TRANSLATE('ABCD','ABC','ab') → 'abD'
-
置換後の文字数が,置換対象文字数より多い場合,余分に指定されている置換後の文字は無視されます。
(例)TRANSLATE('ABCD','AB','abc') → 'abCD'
-
置換した結果,対象データの文字列がすべて取り除かれた場合,実行結果は実長0バイトのデータになります。
(4) 例題
- 例題
-
表T1のC1列(CHAR型)には,日付に関する情報がYYYY.MM.DD(YYYYが年,MMが月,DDが日)の形式で格納されています。これをYYYY/MM/DDの形式に変更します。
SELECT TRANSLATE("C1",'.','/') FROM "T1"