오라클 order by 정렬순서(한글,영어,숫자)

|

출처 : 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시]

    1
    2
    3
    4
    5
    6
    7
    8
    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 ;

     

    답글

  • 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')
     => 영문 > 한글 > 숫자
     
    이라고 하네요.

 

And