2010-03-04 35 views
0

我有以下Oracle查詢:如何通過在TO_CHAR列做爲了

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 

查詢工作正常,如果我刪除order by

我想order此查詢的結果DESC順序基於logoff_date上我使用to_char,使其與AM/PM時間日期

我試着給下面的order_by

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

但結果回來爲:

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

如果運行SQL如圖所示,會發生什麼。你聲明查詢工作正常,如果你通過刪除命令,這意味着它不能正常工作,當你有。 – Craig 2010-03-04 15:57:03

+0

它運行良好=如果我不想排序 它運行不正常=如果我想排序 – drake 2010-03-04 16:00:47

回答

5

目前你是你日期的字符值排序,因爲logoff_date引用別名logoff_date在選擇(NVL(TO_CHAR(...)))。此字符值通常會按字母順序排列,並且不符合DATE列的排序。

如果你想在列的DATE值命令,你必須精確地引用它:

ORDER BY b.logoff_date 
     ^^