실무에서는 어떻게 쓸 지는 잘 모르겠습니다만 (아마도 어플리케이션에서 처리하겠지만), 생각보다 trim 함수는 (코딩테스트 등에서)절찬리에 써먹을 수 있으니 알아보도록 하겠습니다.

 


 postgresql의 trim은 말 그대로, 맨 앞과 맨 뒤에 연속된 특정 문자들을 제거하는 역할을 합니다. python 같은 언어에도 비슷한 것이 있기 때문에 매우 쉽게 와닿으실 겁니다.

 

 

 먼저 1번째. trailing [character set] from [string] 구문입니다. 어려울 건 없고 차근차근 보면 됩니다. trailing은 따라온다는 의미입니다. 뒤에 따라오는 것. 그렇습니다. 끝 부분에 있는 [character set]을 제거한다는 의미입니다. [character set]에 '-'가 왔으므로 끝에 오는 '-'들을 모조리 제거합니다. from 뒤에는 target string이 오는데요. 어떤 문자열인가요? '----abcde-------' 이였습니다. 끝 부분을 제거하므로 '----abcde'가 나오게 됩니다.

 

 

 정말 그렇게 나오는지 볼까요? 그랬더니 정말로 '----abcde'가 나왔네요.

 

 반대로 leading [character set] from [string] 구문은 어떨까요? leading은 앞에 오는을 의미합니다. 즉, 앞에 오는 character set들을 모두 제거합니다. 앞에 '-'가 4개 연속으로 붙은 것을 제거하겠네요.

 

 

 따라서 결과는 앞에 -가 지워진 'abcde-------'가 나오게 됩니다.

 

 

 both [character set] from [string] 구문입니다. 이건 어떨까요? both는 both A and B 같은 구문에서 꽤 쓰였으니 아시겠지만, 양쪽을 의미합니다. 그러니, 저것은 양 끝단에 오는 '-'들을 모두 제거하라는 의미입니다.

 

 

 당연한 결과겠지만 'abcde'가 나옵니다. 여기서 질문. 아래 쿼리의 실행 결과는 어떻게 될까요?

 

 

 -가 모두 제거된 abcde가 나올까요? 아닙니다. 앞쪽에 붙은 '--'와 뒤쪽에 붙은 '--'만 제거되게 됩니다. 따라서 'a-b-cde'가 나오게 됩니다.

 

 

 결과는 요래 되겠습니다. 영어를 잘 알아야 겠군요.

 


 여러 문자가 trailing, 혹은 following 되는 경우에도 간단하게 처리가 가능합니다. 위 예제는 탭 문자와 space (공백) 문자를 캐릭터 셋으로 삼았는데요. trim을 한 문자열의 길이는 어떻게 나올까요?

 

 

 'abcdefg'만 남으므로 7이 나옵니다. 양 끝단에 붙은 공백을 제거하려면 select trim(both ' ' from ' abc ') 이런 식으로 입력해 버리면 됩니다. 탭 문자까지 제거하려면 both ~ 에서 ~ 부분에 tab 문자만 추가하면 됩니다.

 

 

 위 예제는 앞, 혹은 뒤에 붙은 대문자 패턴들을 모두 제거합니다. both 뒤에 오는 구문에 대문자를 죄다 넣어버렸기 때문입니다.

 

 

 결과는 'chogahui'가 나오게 됩니다.