728x90

바즈라님 | 쿼리 | 2013-06-03 17:09:36


일단 DB2에서는 ORDER BY 절이 디폴트로 대소문자를 구분하지 않고 정렬을 하는 것 같습니다.
예를들어
SELECT *
FROM (VALUES 'a','b','c','A','B','C'
         ) TMP(COL1)
ORDER BY COL1;

의 실행 결과는 다음과 같습니다.
a A b B c C

출력 순서를 아래와 같이 수정하려면 어떻게 해야 할까요?

경우1 : a b c A B C
경우2 : A B C a b c
경우3 : A a B b C c




pajama 2013-06-03 17:42:54
안녕하세요. 방법은 여러가지 있을것 같습니다만..그런데 제가 실행해보기로는 말씀하신 SQL의 결과는 A B C a b c 로 나오네요
찾아보니 translate 함수를 쓰는 방법이 있더군요


$ db2 "select col1 from tmp order by col1"

COL1
----
A
B
C
a
b
c


SQL1)
select col1 from tmp
order by translate 
(col1,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghujklmnopqrstuvwxyz',
'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ')

SQL1_결과)
COL1
----
a
A
b
B
c
C

SQL2)
select col1 from tmp
order by translate 
(col1,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghujklmnopqrstuvwxyz',
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz')

SQL2_결과)
COL1
----
A
a
B
b
C
c

SQL3)
select col1 from tmp
order by translate 
(col1,
'abcdefghujklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghujklmnopqrstuvwxyz')

SQL3_결과)
COL1
----
a
b
c
A
B
C

바즈라 2013-06-03 17:52:30
감사합니다. 위 방법으로 일단 해결했습니다.
근데 디폴트 정렬 순서가 다른 이유가 뭘까요? 혹시 테스트 환경에서 오라클 호환모드 켜셨나요?

pajama 2013-06-03 17:59:40
저도 혹시나해서 DB2_COMPATIBILITY_VECTOR=ORA 설정을 바꿔봤습니다만 동일한 결과였습니다. 9.7이고 AIX환경에서 테스트했습니다.

pajama 2013-06-03 22:02:56
보아하니 코드셋 차이로 보입니다. UTF-8일때는 'A B C a b c' IBM-eucKR, ISO885915 등일때는 'a A b B c C'로 나옵니다.

바즈라 2013-06-04 09:02:46
코드셋 차이로 생기는 문제가 맞군요. 
970, 1363 등의 코드셋은 알파벳 순서가 아스키 코드 순서랑 다른가봅니다. 신기하군요.



728x90

+ Recent posts