2010-03-04 93 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 
     ^^