文字列を単語の単位で置換する

REPLACE ( string , search [, replace] )
return [ string ]

string | 置換する対象の文字列全体 | |
search | 置換したい検索単語 | |
replace | 置換後の単語 | default NULL |


REPLACE 関数の内容
文字列 string 中の 検索文字列 search をすべて 置換文字列 replace に置換する。(replace 省略時には文字列は削除される)
NULL をパラメータとした反応は通常の関数と異なる。置換文字列 replace を NULL にすると 検索文字列 search は削除される。
検索文字列 search を NULL にすると 文字列 string がそのまま戻される。
置換できるのは1つの単語のみで、TRANSLATE のように一回の呼び出しで複数文字を特定文字へと置換することはできない。
REPLACE 使用例
TRANSLATE 関数 との比較サンプル。
SQL> set null '<NULL>'
SQL> select str, srch, repl, REPLACE(str, srch, repl) REPLACE_STR,
2 translate(str, srch, repl) TRANS_STR
3 from replace_sample;
STR SRCH REPL REPLACE_STR TRANS_STR
---------------- ---------------- ------------ ---------------- ----------------
abc ab 単語単位 単語単位c 単語c
abccba ab 変換 変換ccba 変換cc換変
abccba abc 単語 単語cba 単語語単
123 456 <NULL> 123 <NULL>
<NULL> <NULL> △ <NULL> <NULL>
あいうえお あいうえお ア-オ ア-オ ア-オ
ぱぴぷぷぴぽ ぱぴぷ パピプ パピプぷぴぽ パヒピぽ
パピプペポ パピプペポ ぱぴぷぺぽ ぱぴぷぺぽ ぱぴぷぴぽぴぴぴ
⇒ SQL*Plus の NULL 表示
置換後の単語 replace の指定が無い場合
文字列 'abcdef' から 検索単語 'abc' を '' に置換する。
SQL> select REPLACE('abcdef', 'abc') from dual;
REPLACE
------
def
NVL 関数 のように NULL を別の値には変換できない。
SQL> set null '<NULL>'
SQL> select REPLACE('', '', 'is null') is_null, nvl('', 'is null') nvl
2 from dual;
IS_NULL NVL
---------------- --------------
<NULL> is null
置換後の単語 replace にならば NULL を指定しても動作する。(※)
SQL> select REPLACE('abccbabc', NULL, NULL) from dual;
REPLACE
----------------
abccbabc
検索単語 'abc' を ''(NULL) に置換する。
SQL> select REPLACE('abccbabc', 'abc', NULL) from dual;
REPL
----
cb
(※) NULL を指定するより 長さ0の文字列('') を指定する方がよいだろう。
SQL 関数 - REPLACE 関連