Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

Postgresql 의 trim 함수는 chr(9), chr(10), chr(13) 따위를 없애지 않는다

제목

Postgresql 의 trim 함수는 chr(9), chr(10), chr(13) 따위를 없애지 않는다.

Postgresql 의 trim 함수는 다른 프로그래밍 언어가 제공하는 trim 함수와는 달리 tab = chr(9), new line = chr(10) / chr(13) 는 없애지 않는다.

다른 데이타베이스가 제공하는 trim 함수도 마찬가지다(Oracle, MariaDB 등).

tab 이나 new line 까지 제거하기 위해서는 다음과 같이 처리해야 한다.

1. 해결방법

1.1. trim

select REGEXP_REPLACE(chr(10) || chr(9) || chr(13) || 'aaa' || chr(10) || chr(9) || chr(13), '^\s+|\s+$', '', 'g')
  • ^ : 시작
  • \s : 공백
  • + : 1글자 이상
  • | : 혹은
  • $ : 끝

1.2. ltrim

select REGEXP_REPLACE(chr(10) || chr(9) || chr(13) || 'aaa' || chr(10) || chr(9) || chr(13), '^\s+', '')

1.3. rtrim

select REGEXP_REPLACE(chr(10) || chr(9) || chr(13) || 'aaa' || chr(10) || chr(9) || chr(13), '\s+$', '')

2. 실패 사례

다음의 sql 은 뒷부분 공백을 1개밖에 없애지 못한다.

select REGEXP_REPLACE(chr(10) || chr(9) || chr(13) || 'aaa' || chr(10) || chr(9) || chr(13), '^\s+(.*)\s+$', '\1')

결과는 'aaa' || chr(10) || chr(9) 이 된다.

3. 활용 사례

메모장에서 변경전 sql 은 다음과 같다.

title like '%' || ? || '%' or contents like '%' ? || '%'

위 sql 은 사용자가 복사해서 붙이는 등의 방식으로 검색어를 입력하는 과정에서 tab 등의 문자가 검색어의 앞뒤로 붙게 되는 경우에 다소간의 불편함이 있었다.

변경후 sql 은 다음과 같다.

title like '%' || REGEXP_REPLACE(?, '^\s+|\s+$', '', 'g') || '%'
or contents like '%' || REGEXP_REPLACE(?, '^\s+|\s+$', '', 'g') || '%'

전체 소스코드는 memo.xml 을 참조한다.

4. 참고자료

제목

첨부파일