我有以下oracle查询:
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
的{{1}}订单查询此查询的结果,以使其成为日期/时间分
我尝试将以下内容设为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
答案 0 :(得分:5)
目前,您按日期的字符值排序,因为logoff_date引用了select(logoff_date
)中的别名NVL(TO_CHAR( ...))
。此字符值通常按字母顺序排序,与DATE列的顺序不匹配。
如果您想按列的DATE值排序,则必须精确引用它:
ORDER BY b.logoff_date
^^