더북(TheBook)

⑤ 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 함수는 글자 한 자씩, 즉 ‘나’→‘너’, ‘는’→‘를’로 변환해서 원래 문장에 있던 ‘는’이 모두 ‘를’로 바뀌어 맞춤법에 맞지 않는 문장이 되었다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.