SQL 이 우리말보다 편한 멋쟁이천재사자입니다.
오늘 오픈채팅방에서 우연히 LTRIM 관련 질문을 보고 깜짝 놀랐습니다.
1. 간단하지만 깜짝 놀란 질문
데이터자격증 관련 오픈 채팅방에서 어떤 분의 질문을 보았습니다.
다음 SQL 의 결과는 ?
select RTRIM(LTRIM('SQL DEVELOPER', 'S'), 'SQL') from dual
2. 왜 놀랐냐구요?
오래 전 OCP8i 취득한 이래 SQL과 함께한 세월이 20여년입니다.
그런데 질문에서 보이는 LTRIM RTRIM 사용 구문이 생소합니다.
두 번째 인수를 사용한 문장을 처음 봅니다.
언제부터 제공된 기능이었을까?
3. 관련 질문을 Googling 해보았습니다.
똑같은 질문이 네이버카페에도 올라와 있네요.
https://cafe.naver.com/sqlpd/38971
4. 테스트를 해보았습니다.
몇 가지 테스트해보니 어려울 것은 없고, 어딘가 굉장히 유용하게 사용할 곳이 있을 것 같습니다.
select RTRIM(LTRIM('SQL DEVELOPER', 'S'), 'SQL') from dual -- QL DEVELOPER
select RTRIM('SQL', 'LE') from dual -- SQ
select RTRIM('SQL', 'LQ') from dual -- S
TRIM 도 동일한 방식이 제공될 것 같은데 안되네요.
select TRIM('SQL DEVELOPER', 'S') from dual -- ORA-00907
5. 혹시 나만 모르고 있었던 것일까?
주변을 돌아다니면서 설문조사를 해볼까요? 별로 제가 좋아하는 방법이 아니네요.
현재 일하는 환경이 Oracle 이며 ETL script 는 파일서버에 모두 공유되어있습니다.
SQL 파일들에서 두 번째 인수를 주어서 사용한 사례가 있는지 확인해보는 것으로 끝낼게요.
6. Eclipse 와 정규표현식
SQL 소스 파일들을 로칼에 복사해두고 해당 폴더를 Eclipse 에서 검색했습니다.
RTRIM('SQL', 'LE') 이런 패턴의 sql 이 있는지 찾아보는 정규표현식은 무엇일까요?
다음 2가지중 아무거나 하나 사용하면 될 거 같습니다.
RTRIM\( *'[[:alnum:]]+'*, *'[[:alnum:]]+' *\)
RTRIM\( *'[A-Za-z0-9]+'*, *'[A-Za-z0-9]+' *\)
찾아보았는데 없네요.
일부러 만들어둔 테스트 파일(... RTRIM('SQL', 'LE') ...)만 조회되었습니다.
지금 생각하니 '' 사이의 문자에 공백이 있을 수도 있네요.
정규표현식을 보완해서 내일 다시 조사를 해보아야겠네요. ㅠㅠ
7. 다음날 추가 조사
공백을 하나 추가한 방식으로 패턴을 보완했습니다.
ltrim rtrim 둘 다 가능하므로 trim 이라고만 해보았습니다.
TRIM\( *'[A-Za-z0-9 ]+'*, *'[A-Za-z0-9 ]+' *\)
검색된 결과가 없습니다.
너무 타이트한 조건인가? A-Za-z0-9 대신에 [^'] 즉 ' 이 아닌 모든 문자로 변경하여 다시 확인했습니다.
TRIM\( *'[^']*'*, *'[^']*' *\)
역시 결과가 없습니다.
첫 번째 인수에 ' 으로 묶인 문자열이 아닌 칼럼명이 올 수도 있지요.
RTRIM(col1, 'LQ') 이런 패턴이요. 이것이 흔한 패턴이겠네요.
[LR]TRIM\([^,]*, *'[^']*' *\)
앗!
엄청나게 많은 파일에서 발견이 됩니다
LTRIM(RTRIM(NVL(USER1.COL1,'-'), CHR(13) || CHR(10)), CHR(13) || CHR(10) )
RTRIM(TO_CHAR((0.413 * COL1) / CODE.COL1,'fm99999990.9999'),'.')
라인피드 캐리지리턴 마침표(.) 등을 없애기 위한 코드로군요.
LTRIM RTRIM 이 두번째 인수와 함께 쓰인 흔적이 없을 거란 섣부른 예측은 완전히 틀렸습니다.
항상 겸손해야 한다는 것을 다시 배운 바보사자였습니다.
'SQL' 카테고리의 다른 글
Oracle Timestamp Interval (0) | 2022.10.07 |
---|---|
key value 파싱 방법 (0) | 2022.10.07 |
[TIP] 테이블 레이아웃 조회 (0) | 2022.08.23 |
부서별 평균 월급보다 높은 월급의 사원 목록 구하기 (0) | 2022.07.19 |
Oracle 컬럼 자료형 NUMBER(3,2) 의미는? (0) | 2022.07.14 |