⑤ REPLACE(char, search_str, replace_str), TRANSLATE(expr, FROM_str, to_str)
REPLACE 함수는 char 문자열에서 search_str 문자열을 찾아 이를 replace_str 문자열로 대체한 결과를 반환하는 함수다.
입력
SELECT REPLACE('나는 너를 모르는데 너는 나를 알겠는가?', '나', '너')
FROM DUAL;
결과
REPLACE('나는너를모르는데너는나를알겠는가?','나','너')
-------------------------------------------------------------
너는 너를 모르는데 너는 너를 알겠는가?
보통 문자열에서 공백을 제거할 때, LTRIM이나 RTRIM을 사용하지만 이 두 함수는 문자열 중간에 있는 공백은 제거하지 못한다. 하지만 REPLACE 함수를 사용하면 문자열 전체에 있는 공백을 모두 제거할 수 있다.
입력
SELECT LTRIM(' ABC DEF '),
RTRIM(' ABC DEF '),
REPLACE(' ABC DEF ', ' ', ''),
FROM DUAL;
결과
LTRIM('ABCDEF') RTRIM('ABCDEF') REPLACE('ABCDEF','','')
--------------- --------------- -----------------------
ABC DEF ABC DEF ABCDEF
TRANSLATE 함수는 REPLACE와 유사하다. expr 문자열에서 FROM_str에 해당하는 문자를 찾아 to_str로 바꾼 결과를 반환하는데, REPLACE와 다른 점은 문자열 자체가 아닌 문자 한 글자씩 매핑해 바꾼 결과를 반환한다.
입력
SELECT REPLACE('나는 너를 모르는데 너는 나를 알겠는가?', '나는', '너를') AS rep,
TRANSLATE('나는 너를 모르는데 너는 나를 알겠는가?', '나는', '너를') AS trn
FROM DUAL;
결과
REP TRN
-------------------------------------- --------------------------------------
너를 너를 모르는데 너는 나를 알겠는가? 너를 너를 모르를데 너를너를 알겠를가?
두 함수의 차이가 눈에 보이는가? REPLACE 함수는 ‘나는’을 ‘너를’ 로 바꾸므로 “나를 알겠는가?”에서 ‘나를’은 바뀌지 않았지만 TRANSLATE 함수는 글자 한 자씩, 즉 ‘나’→‘너’, ‘는’→‘를’로 변환해서 원래 문장에 있던 ‘는’이 모두 ‘를’로 바뀌어 맞춤법에 맞지 않는 문장이 되었다.