기본적으로 RTRIM, LTRIM 등은 공백을 제거하는 용도로 사용한다.
추가로 ORACLE에서는 조금 더 확장된 사용법이 있다.
RTRIM(문자열) : 기본 기능. 오른쪽 공백 제거
RTRIM(문자열, '특정 문자') : 오른쪽에서 한 글자씩 비교하며 특정 문자일 경우 제거, 아닐 경우 멈춤.
LTRIM도 동일하지만 왼쪽에서 진행하게 된다.
여기서 주의할 점은 '한 글자씩 비교' 한다는 점이다.
신기해서 직접 테스트해본 결과를 사진으로 정리하겠다.
먼저 COL1에 ' cececece' 라는 값을 테스트하기 위해 넣어주었다. 앞에 공백 2칸이 존재한다.
여기에 단순히 LTRIM(대상, 조건)을 걸면, 아무일도 일어나지 않는다.
왜냐면 첫 번째 칸이 ' '(공백)이기 때문이다.
LTRIM(문자열) 일 경우 왼쪽 공백을 제거해주지만,
LTRIM(문자열, 조건문자) 의 경우 공백 제거 기능이 아닌 조건 문자열에 대한 TRIM만 처리한다는 것을 확인할 수 있다.
만약 공백을 제거한 후 조건을 걸고 싶다면, 이렇게 LTRIM 안의 대상 문자열에 LTRIM 기본사용식을 넣어서 처리할 수 있을 것이다.
이 부분에서 ce가 반복되는 경우, 반복되는 만큼 사라져서 결국 NULL을 반환하는 것도 확인할 수 있었다.
또 한가지 유의할 점은 처음에 말했던 '한 글자씩 비교' 이다.
이번엔 첫번째 c와 e중간에 a를 넣은 새로운 row로 실험을 진행해보았다.
마지막 row를 보면 aececece으로, 맨 앞의 c 하나만 지워진 것을 확인할 수 있다.
결국 조건인 'ce'를 통째로 비교해서 ce일 경우에 날리는 것이 아니라
'ce'조건일 경우 첫 글자가 c일 경우 c를 지우고, 다음이 e일 경우 e를 지우는 식으로
조건문 내 한 글자 단위로 조건을 만족하지 않을 때까지 반복된다는 것이다.
문제로 내기 딱 좋은 작동 방식인 것 같아 한 번 정리해보았다.
'SQL > SQLD학습' 카테고리의 다른 글
Count(*) (0) | 2024.02.05 |
---|---|
GROUP BY 없이 HAVING 사용하기 (0) | 2024.02.02 |
ADD_MONTHS의 edge case (0) | 2024.02.01 |
FLOOR와 TRUNC 의 차이 (1) | 2024.02.01 |
엔티티와 속성 (0) | 2024.01.25 |