출처 : http://www.gurubee.net/m/article/66519
ㄱㄴㄷㄹ..... 순으로 order by 를 하려고 하는데요...
그렇게 할 경우 영어가 우선순위가 되는데
혹시 ㄱㄴㄷㄹ순으로 나오되 영어는 뒤에 나오게 하려면 어떻게 해야하나요
-
아발란체 (4,916:Lv47) [2016년 01월 15일 14시]
WITH T AS (
SELECT 'ㄱ' AS val FROM DUAL UNION ALL
SELECT 'ㄴ' FROM DUAL UNION ALL
SELECT 'ㄷ' FROM DUAL UNION ALL
SELECT 'A' FROM DUAL UNION ALL
SELECT 'B' FROM DUAL
)
SELECT * FROM T ORDER BY CONVERT(val, 'ISO2022-KR') -
개꿈 (95:Lv9) [2016년 01월 15일 14시]
와우~ 감사합니다 아발란체님~^^
-
대한민국만세 (150:Lv11) [2016년 01월 15일 14시]
지원하지 않는 캐릭터셋이라고 하는데요 ㅜㅜ
오라클 11버전이고 토드에서 실행했습니다.
-
대한민국만세 (150:Lv11) [2016년 01월 15일 15시]
12345678WITH
T
AS
(
SELECT
'ㄱ'
AS
val
FROM
DUAL
UNION
ALL
SELECT
'ㄴ'
FROM
DUAL
UNION
ALL
SELECT
'ㄷ'
FROM
DUAL
UNION
ALL
SELECT
'A'
FROM
DUAL
UNION
ALL
SELECT
'B'
FROM
DUAL
)
SELECT
*
FROM
T
ORDER
BY
CASE
WHEN
VAL >
'Z'
THEN
'0'
ELSE
'1'
END
;
-
jkson (1,133:Lv33) [2016년 01월 15일 15시]
아발란체님 꺼 잘 되는데 이상하네요.
대문자 Z보다 소문자 z가 더 클걸요? 그리고 영문끼리, 한글끼리 order by 먹히게 하려면
ORDER
BY
CASE
WHEN
VAL >
'Z'
THEN
'0'
ELSE
'1'
END
뒤에 val 추가하셔야할 것 같아요.그렇다고 하더라도 'AA'., 'A가' 라는 데이터가 있다면 의도한 바는 'A가'가 먼저나오는 것인데 'AA' 가 먼저 나오게 될 것 같아요.
구글링 해보니..
한글, 영문, 숫자에 대한 정렬 알고리즘오라클에서 제공하는 order by 에 대힌 default 정렬 순서=> 숫자 > 영문 > 한글order by convert (컬럼명, 'VN8VN3')=> 숫자 > 한글 > 영문order by convert (컬럼명, 'US8ICL')=> 한글 > 영문 > 숫자order by convert (컬럼명, 'ISO2022-KR')=> 한글 > 숫자 > 영문order by convert (컬럼명, 'UTFE')=> 영문 > 한글 > 숫자이라고 하네요.