Order by 문의드립니다 1 4 1,610

by ivovi [SQL Query] order [2014.03.28 17:25:33]



order by에 관한 문의드립니다.

해당 컬럼에 데이터 타입은 varchar2 타입입니다.

현재 데이터 베이스 상에는 아래와 같은 값이 들어가있습니다.

1-34
10-6
11-9
141
151-1
16-10
16-12
170-3

order by 를 해당 컬럼으로 했을 경우 문자열 값이라 저상태로 정렬이 되버리네요..

문자열같지만 정렬은 숫자같게..

변경

1-34
10-6
11-9
16-10
16-12
141
151-1
170-3

이렇게 정렬할 수 있는 방법이 있을까요?

by DarkBee [2014.03.28 17:39:15]
SELECT REGEXP_SUBSTR ( col, '[^-]+', 1, 1 ) odr1
   , REGEXP_SUBSTR ( col, '[^-]+', 1, 2 ) odr2
   , col
 FROM t
 ORDER BY TO_NUMBER ( odr1 )
    , TO_NUMBER ( odr2 ) NULLS [LAST|FIRST] -- 입맛에 따라 골라쓰세요 뙇

by 마농 [2014.03.28 19:31:37]
당황하지 않고,
두번째 정렬항목 뒤에 NULLS FIRST 를 딱.
끝.

by DarkBee [2014.03.28 21:03:40]
개그를 이어가겠습니다.

'Null이 가장 마지막에 나와야한다면?'

죄송합니다. 재미없네요 - -;

by 쀍 [2014.03.28 18:01:57]
WITH T AS ( SELECT '1-34' AS A FROM DUAL UNION ALL
      SELECT '10-6' AS A FROM DUAL UNION ALL
      SELECT '11-9' AS A FROM DUAL UNION ALL
      SELECT '141'  AS A FROM DUAL UNION ALL
      SELECT '151-1' AS A FROM DUAL UNION ALL
      SELECT '16-10' AS A FROM DUAL UNION ALL
      SELECT '16-12' AS A FROM DUAL UNION ALL
      SELECT '170-3' AS A FROM DUAL )
SELECT A
FROM  T    
ORDER BY TO_NUMBER(SUBSTR(A,1,DECODE(INSTR(A,'-',1,1),0,4,INSTR(A,'-',1,1))-1))
    ,TO_NUMBER(DECODE(INSTR(A,'-',1,1),0,NULL,SUBSTR(A,INSTR(A,'-',INSTR(A,'-',1,1))+1,4)))
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입