2010-03-04 2 views
0

I 후속 오라클 쿼리가 : 나는 order byTO_CHAR 열에 의해 순서를 수행하는 방법에

내가 DESC 위해이 쿼리의 결과를 order하려는 제거하면

SELECT a.USER_ID, 
      c.first_name, 
      c.last_name, 
      TO_CHAR(b.logon_date, 'MM/DD/YYYY HH:MI:SS am') logon_date, 
      NVL(TO_CHAR(b.logoff_date, 'MM/DD/YYYY HH:MI:SS am'), '') logoff_date, 
      a.session_id 
     FROM table a, 
      table b, 
      table c 
     WHERE a.row_id >= start_row 
       AND a.row_id <= end_row 
       AND a.session_id = b.session_id 
       AND a.USER_ID = b.USER_ID 
       AND a.USER_ID = RTRIM(LTRIM(c.USER_ID)) 
     ORDER BY logoff_date DESC 

쿼리가 잘 작동을 logoff_date를 기반으로하는 나는 내가 order_by

로 다음주는 시도

오전/오후 시간과 날짜를 만들기 위해 to_char을 사용하고 있습니다 617,451,515,

NVL(TO_CHAR(b.logoff_date, 'MM/DD/YYYY HH:MI:SS am'), '') 

하지만 결과로 돌아올 : logoff_date이 선택 (NVL(TO_CHAR(...)))의 별칭 logoff_date을 참조하기 때문에 현재 당신이 당신의 날짜의 문자 값에 의해 주문하는

03/03/2010 12:59:37 am 
03/03/2010 12:53:12 pm 
03/03/2010 12:41:40 pm 
03/03/2010 12:19:38 am 
03/03/2010 11:34:04 am 
03/03/2010 10:41:47 am 
03/03/2010 10:16:16 pm 
03/03/2010 10:14:45 pm 
03/03/2010 09:59:54 am 
03/03/2010 07:36:17 pm 
+1

. 주문을 삭제하면 쿼리가 제대로 작동한다고 나와 있습니다. 즉, 주문을 처리 할 때 제대로 작동하지 않는다는 의미입니다. – Craig

+0

잘 실행됩니다 = 정렬을 원하지 않으면 잘 실행되지 않습니다. = 정렬을 원한다면 – drake

답변

5

. 이 문자 값은 일반적으로 알파벳 순으로 정렬되며 DATE 열의 순서와 일치하지 않습니다. 당신이 컬럼의 날짜 값으로 주문하려면

, 당신은 정확하게 그것을 참조해야합니다 :

같이 당신이 SQL을 실행하면 어떻게됩니까
ORDER BY b.logoff_date 
     ^^ 
관련 문제