日期比较00

问题描述:

结束存储在我的数据库中的日期为01-01-1900现场emp_doj(Data Type DATE)日期比较00

但检索数据时,该值是01-jan-00,即使格式化dd-mm-yyyy

我在SQL查询的一些其他日期进行比较的检索日期字段。

select * 
form persons 
where per_join = to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY') 

这里to_date(to_char(i.emp_doj,'DD-MM-YYYY'),'DD-MM-YYYY')结果01-01-00的价值,而不是01-01-1900

我有它目前为我的作品一些临时性的解决方案,我只是改变了我的选择查询

select * 
form persons 
where to_date(per_join,'DD-MM-YYYY')= to_date(i.emp_doj,'DD-MM-YYYY') 

select to_char(emp_doj,'dd-mm-yyyy') from yourtable 
+0

谢谢偶然的机会,我已经试过,但我仍得到相同的结果,00年1月1日 – Maddy 2011-12-16 11:16:53

+0

您收到此,即使您运行的精确查询@chance已经发布?复制并粘贴? – Ollie 2011-12-16 11:37:24

我怀疑它,是你的默认NLS设置为IDE您使用的是仅仅显示了两位数的年份日期。 Oracle不以任何特定格式存储日期。它在内部以二进制格式存储它们。

因此,我建议您检查IDE和/或数据库的设置,并且您将看到NLS日期格式设置为DD-MM-YY,请将其更改为DD-MM-YYYY,然后您将看到您希望看到的日期。

至于您的查询,为什么要用TO_CHAR然后TO_DATE?如果emp_doj是一个日期字段,并且per_join也是一个日期,那么就直接比较它们是否相等。如果您试图减少您的emp_doj值的时间部分,则只需使用TRUNC()即可。关于NLS

的示例和参考:http://www.orafaq.com/wiki/NLS

这里更多:http://www.oracle.com/technetwork/database/globalization/nls-lang-099431.html