오라클 order by 질문좀요.. 0 5 3,071

by 개꿈 [SQL Query] [2016.01.15 13:46:39]


ㄱㄴㄷㄹ..... 순으로 order by 를 하려고 하는데요...

그렇게 할 경우 영어가 우선순위가 되는데 

혹시 ㄱㄴㄷㄹ순으로 나오되 영어는 뒤에 나오게 하려면 어떻게 해야하나요

by 아발란체 [2016.01.15 14:03:01]

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')


by 개꿈 [2016.01.15 14:05:52]

와우~ 감사합니다 아발란체님~^^


by 대한민국만세 [2016.01.15 14:57:09]

지원하지 않는 캐릭터셋이라고 하는데요 ㅜㅜ

오라클 11버전이고 토드에서 실행했습니다.


by 대한민국만세 [2016.01.15 15:01:28]
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 CASE WHEN VAL >'Z' THEN '0' ELSE '1' END ;

 


by jkson [2016.01.15 15:20:42]

아발란체님 꺼 잘 되는데 이상하네요.

대문자 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')
 => 영문 > 한글 > 숫자
 
이라고 하네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입