REPLACE
- REPLACE(char, search_string, replacement_string)
SELECT REPLACE('oracleStudy','oracle','db') AS result FROM DUAL; -- dbStudy
-- 문자열은 대소문자 구분하니 항상 조심
SELECT REPLACE('oracleStudy','Study','learn') AS result FROM DUAL; -- oraclelearn
-- 공백 제거
SELECT REPLACE('oracle S t u d y',' ','') AS result FROM DUAL; -- oracleStudy
-- 문자 제거
SELECT REPLACE('oracleStudy','oracle') AS result FROM DUAL; -- Study
REPLACE 함수는 search_string을 탐색하고 정확히 일치하는것을 replacement_string으로 바꿔준다.
그리고 보통 공백을 제거할 때는 LTRIM 이나 RTRIM을 이용하여 앞뒤의 공백을 제거해 주고는 하는데,
문자열의 중간에 있는 공백은 제거하지 못한다.
그럴때 중간에 있는 공백을 제거해주기 위해 REPLACE 함수를 사용하고는 하는데,
이는 문자열 전체에 있는 공백을 모두 제거할 수 있다는 의미이다.
replacement_string이 생략 됐다면 당연히 아무것도 없다는 판단하에 search_string과 일치하는 것들은 삭제된다.
TRANSLATE
- TRANSLATE(expr, from_string, to_string)
SELECT TRANSLATE('oracle DB tocel','olce','!@#$') AS result FROM DUAL; -- !ra#@$ DB t!#$@
SELECT TRANSLATE('oracle DB tocel','olce','%^') AS result FROM DUAL; -- %ra^ DB t%^
SELECT TRANSLATE('oracle DB tocel','o','&*^') AS result FROM DUAL; -- &racle DB t&cel
TRANSLATE 함수는 REPLACE 함수와 비슷하지만,
문자를 한글자씩 매칭해서 바꾼다는게 큰 차이가 있다.
예제를 통해 설명을 해보자면
1번 예제는 olce를 !@#$로 바꾸라고 했지만 반환값을보면 o는 !, l은 @, c는 #, e는 $ 이런식으로 각각 변한것을 볼 수 있다.
2번 예제는 olce를 %^로 바꾸라고 했으나 o는 %, l은 ^ 로만 바뀌고 나머지만 null처리되어 삭제되는 것을 볼 수 있다.
3번 예제는 o를 &*^로 바꾼다고 선언 했으나 o는 &로만 바뀌는 것을 볼 수 있다.
이처럼 예제를 통해 하나 알아낼 수 있는게, from_string의 각각의 위치와 to_string에 선언된 문자열의 위치가 동일한 녀석들만 짝을 이뤄서 변화하는 것을 알 수 있다.
그래서 보통 REPLACE를 많이 사용하기 때문에 TRANSLATE라는 함수도 있구나 하고 넘어가면 좋을 것 같다.
댓글