2016-01-13 89 views
0

我有一个名为'ADDRESSES'的表。Oracle sql order by not expected as working as expected?

我的查询:

select MODIFIED_DATE, CITY from ADDRESSES order by MODIFIED_DATE desc, CITY asc; 

通过运行上面的查询,我得到:

MODIFIED_DATE CITY 
============= ============== 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  DENVER 
13-JAN-16  DENVER 

但我相信:

MODIFIED_DATE CITY 
============= ============== 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  CHICAGO 
13-JAN-16  DENVER 
13-JAN-16  DENVER 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 
13-JAN-16  KANSAS CITY 

MODIFIED_DATE的数据类型是日期和数据CITY的类型是VARCHAR2。

这究竟是为什么?

+4

我怀疑是有时间组件添加到您'DATE'值,即使不是被显示的话。 –

+1

首先运行:'alter session set nls_date_format ='dd-mon-yyyy hh24:mi:ss';'然后重新运行您的查询;) – Ditto

回答

9

Oracle日期包含比显示更多的信息:小时,分钟和秒。如果你只在日期部分有兴趣,你应该使用trunc()

order by trunc(MODIFIED_DATE) desc, CITY asc 
相关问题