8.7.1 REPLACE
対象データ中の任意の文字列を置換します。対象データ中に存在する置換対象文字列のすべてを置換後の文字列に置換します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数REPLACE::=REPLACE(対象データ,置換対象文字列〔,置換後の文字列〕) 対象データ::=値式 置換対象文字列::=値式 置換後の文字列::=値式
(2) 指定形式の説明
- 対象データ:
-
対象データを指定します。
指定規則を次に示します。
-
対象データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
対象データには,CHAR型またはVARCHAR型のデータを指定してください。
-
対象データには,?パラメタを単独で指定できません。
-
- 置換対象文字列:
-
置換対象の文字列を指定します。
指定規則を次に示します。
-
置換対象文字列は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
置換対象文字列には,CHAR型またはVARCHAR型のデータを指定してください。
-
置換対象文字列に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はVARCHAR(32000)になります。
-
- 置換後の文字列:
-
置換後の文字列を指定します。
指定規則を次に示します。
-
置換後の文字列は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
置換後の文字列には,CHAR型またはVARCHAR型のデータを指定してください。
-
置換後の文字列に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はVARCHAR(32000)になります。
-
置換後の文字列を省略した場合,実長0バイトのデータが仮定されます。
-
スカラ関数REPLACEの実行結果の例を次に示します。
- (例)
-
対象データ中のすべての文字列BCDをYZに置換します。
REPLACE('ABCDEBCD','BCD','YZ') → 'AYZEYZ'
(3) 規則
-
実行結果のデータ型とデータ長を次の表に示します。
表8‒21 スカラ関数REPLACEの実行結果のデータ型とデータ長 対象データのデータ型とデータ長
実行結果のデータ型とデータ長
CHAR(n)
VARCHAR(n)
VARCHAR(n)
(凡例)n:対象データの最大長
-
置換した結果,実行結果のデータ長を超えた場合,エラーになります。そのため,実行結果のデータ長を大きくしたい場合は,スカラ関数CASTを使用して対象データのデータ長を変更してください。
- (例)
-
C1列はVARCHAR(5)の列で,文字列'ABCD'が格納されているとします。
REPLACE("C1",'AB','WXYZ') → エラー
上記の例の場合,REPLACEの実行結果のデータ長はVARCHAR(5)になるため,データ長不足によってエラーになります。
REPLACE(CAST("C1" AS VARCHAR(10)),'AB','WXYZ') → 'WXYZCD'
上記の例の場合,REPLACEの実行結果のデータ長はVARCHAR(10)になるため,エラーになりません。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
対象データ,置換対象文字列,または置換後の文字列のどれかがナル値の場合,実行結果はナル値になります。
-
置換した結果,対象データの文字列がすべて取り除かれた場合,実行結果は実長0バイトのデータになります。
-
置換対象文字列に実長0バイトまたは実長0文字のデータを指定した場合,対象データ中の文字は置換されません。
-
置換後の文字列に実長0バイトまたは実長0文字のデータを指定した場合,対象データ中の置換対象文字列がすべて削除されます。
(4) 例題
- 例題
-
表T1のC1列(CHAR型)には,日付に関する情報がYYYY.MM.DD(YYYYが年,MMが月,DDが日)の形式で格納されています。
YYYYが2013年の場合,2014年に一括置換します。
SELECT REPLACE("C1",'2013','2014') FROM "T1"