IT

[오라클/함수] 문자 및 문자열 바꾸기 REPLACE, TRANSLATE 함수

생각파워 2016. 12. 8. 14:18

Syntax

 

Description of replace.gif follows

 

 

Description of translate.gif follows

 

Purpose

 

 

오라클에서 문자열을 바꿀때 REPLACE 함수를 많이 사용합니다. 저 역시도 REPLACE 함수를 대부분 사용했었습니다. 그런데 오라클 레퍼런스를 보니 TRANSLATE 함수도 있네요. 두 함수 모두 해당 지정된 문자열을 바꿔주는 함수인데, 약간의 차이가 있습니다. 이 두 함수의 차이점에 대해서 알아보도록 하겠습니다.

상단의 문법을 참고해 주세요.

먼저 REPLACE 함수는 char 문자열에서 search_string 문자열을 찾아서 replace_string 문자열로 바꿔주는 기능을 합니다. 여기서 '문자열'이라는것이 중요한데, search_string에 나오는 정확한 문자열이 char에 없으면 문자열 변환작업을 하지 않습니다. 

예를들어 아래 REPLACE 문을 수행하면

 

 

 

이렇게 출력이 됩니다. 이유는 'ABCDEFG' 문자열에서 'C' 문자가 있기때문에 이것을 '!@#'로 대체해서 출력해주는것입니다. 

그럼 찾는 문자열에 'CEG'를 넣으면 어떻게 될까요?

 

 

 

문자열 'ABCEDFG'에 'C','E','G' 문자가 각각들어있기는 하지만 'CEG'가 붙어 있는 문자열이 없기 때문에 문자열 대체 작업이 일어나지 않습니다. 당연한거죠.

 

그런데....

 

이것을 TRANSLATE 함수에 적용해보면 값이 다르게 나타납니다. 

위 예제에서 함수명만 TRANSLATE로 변경해서 수행해보겠습니다. 

 

 

      

결과를 보면 문자 'C','E','G'가 대체문자  '!','@','#' 로 각각 변경된것을 알 수 있습니다. 대체문자를 'C' 하나로 해보면 'C'만 '!'로 변경됩니다. 

 

 

 

위 예제들을 보면 REPLACE와 TRANSLATE 함수의 차이를 알 수 있습니다. 처음 얘기했듯이 REPLACE는 지정된 정확한 문자열을 찾아서 대체문자열로 변경하는데 반해, TRANSLATE는 지정문자열과 대체문자열을 각각하나의 문자로 대체한다는것입니다. 위의 예에서는 순서대로 C = !  , E = @, G = # 로 대체되었습니다.   

정확한 문자열을 변경하려고 할때는 REPLACE함수를 쓰고, 문자 각각을 변경하려고 하면 TRANSLATE를 쓰는것이 좋을것 같습니다. 

 

* REPLACE와 TRANSLATE 사용시 주의점

 

1. REPLACE의 경우 대체문자열을 지정하지 않으면 search_string에 의해 찾아진 문자들은 삭제되어 리턴됩니다. 대체문자가 null 이라고 생각하시면 되겠네요.

 

 

 

2. TRANSLATE의 경우도 대체문자열이 지정되지 않으면 지정된 문자는 삭제되어 리턴됩니다. 이것 역시 대체문자가 null이라고 생각하시면 될것 같습니다. 

 

 

 

'C','E','G'는 각각 순서대로 '!','@','#' 대체문자가 있어서 변경되고, 'A','B'는 대응하믄 문자가 없어서 삭제되어 리턴되었습니다. 

 

 

 

반응형