这伤害了我。 Oracle RDMS使用SQL Devloper v.4 我在表中有记录
EMP|DATE_STARTED
JOE|11/08/06
BOB|11/08/14
MAY|31/12/99
DATE_STARTED是DATE数据类型。
我的查询返回31/12/99作为最新日期,但该表有后来的记录(2006年和2014年)。
select max(DATE_STARTED) from EMPLOYEE;
为什么不回复11/08/14?
答案 0 :(得分:0)
为了让您明白为什么要将31/12/99作为最新日期,请参阅演示。
您的原始查询:
with sample_table (EMP,DATE_STARTED) as (
select 'JOE', '11/08/06' from dual
union all
select 'BOB', '11/08/14' from dual
union all
select 'MAY', '12/08/99' from dual
)
select max(DATE_STARTED)
from sample_table
输出
12/08/99
我添加to_date
并再次显示日期。
with sample_table (EMP,DATE_STARTED) as (
select 'JOE',to_date('11/08/06','dd-mm-yy')from dual
union all
select 'BOB', to_date('11/08/14','dd-mm-yy') from dual
union all
select 'MAY', to_date('12/08/99','dd-mm-yy') from dual
)
select DATE_STARTED-- max(DATE_STARTED)
from sample_table
输出:
11-08-2006
11-08-2014
12-08-2099
现在从上面的查询输出中你可以看到oracle返回的结果非常正确。上述结果集的最大日期为12-08-99
。
因此,上面的推论是,当您未将年份指定为yyyy
时,Oracle会进行隐式转换,并根据其系统参数设置yy值。
要解决您的问题,您需要以下内容。
with sample_table (EMP,DATE_STARTED) as (
select 'JOE',to_date('11/08/2006','dd-mm-yy')from dual
union all
select 'BOB', to_date('11/08/2014','dd-mm-yy') from dual
union all
select 'MAY', to_date('12/08/1999','dd-mm-yy') from dual
)
select max(DATE_STARTED)
from sample_table
输出:
11-08-2014
答案 1 :(得分:0)
解决了所有人。
解决方案: 1.在SQL Developer中转到Tools \ Preferences \ Database \ NLS Parameters \ Date 2更新DD / MON / RR hh24:mi:ss到DD / MON / RR RR hh24:mi:ss
它提供了预期的结果!