dra*_*ake 0 sql oracle sql-order-by
我有一个以下的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
Run Code Online (Sandbox Code Playgroud)
查询工作正常,如果我删除 order by
我希望order这个查询的结果按DESC顺序基于logoff_date我使用to_char它来使它成为一个时间在上午/下午的日期
我尝试给予以下作为 order_by
NVL(TO_CHAR( b.logoff_date, 'MM/DD/YYYY HH:MI:SS am'), '')
Run Code Online (Sandbox Code Playgroud)
但结果又回来了:
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
Run Code Online (Sandbox Code Playgroud)
目前,您按日期的字符值排序,因为logoff_date引用logoff_date了select(NVL(TO_CHAR( ...)))中的别名.此字符值通常按字母顺序排序,与DATE列的顺序不匹配.
如果要按列的DATE值排序,则必须精确引用它:
ORDER BY b.logoff_date
^^
Run Code Online (Sandbox Code Playgroud)