문제
다음 중 문자열 처리 함수의 실행 결과가 나머지 셋과 다른 하나는? (Oracle 기준)
① SELECT TRIM('xxSQLxx', 'x') FROM DUAL; ② SELECT RTRIM('SQLxx', 'x') FROM DUAL; ③ SELECT REPLACE('xxSQLxx', 'x') FROM DUAL; ④ SELECT LTRIM('xxSQL', 'x') FROM DUAL;
정답
1번
해설
정답: 1. ②③④는 모두 'SQL'을 반환하지만, ①은 문법 오류(ORA-00907)로 결과가 다르다. 오라클 TRIM은 TRIM([LEADING|TRAILING|BOTH] 문자 FROM 문자열) 형태만 허용하며, TRIM('xxSQLxx', 'x')처럼 콤마로 두 인수를 넘기는 문법은 지원하지 않는다.
오답 풀이
- ①: 정답. 콤마 구분 2인수 TRIM 문법은 오라클에서 오류(ORA-00907 missing right parenthesis)가 발생하여 값을 반환하지 못한다.
- ②: RTRIM('SQLxx','x')는 오른쪽 끝의 'x'들을 제거해 'SQL'을 반환한다.
- ③: REPLACE('xxSQLxx','x')처럼 세 번째 인수를 생략하면 'x'를 빈 문자열로 치환하여 'SQL'을 반환한다.
- ④: LTRIM('xxSQL','x')는 왼쪽 앞의 'x'들을 제거해 'SQL'을 반환한다.
보충 개념
TRIM은 양쪽 한 종류의 문자만 제거하며 FROM 키워드를 쓴다. RTRIM/LTRIM은 두 번째 인수로 제거할 문자 집합을 받고, REPLACE는 세 번째 인수를 생략하면 대상 문자열을 삭제한다.