日期比较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
答
我怀疑它,是你的默认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
谢谢偶然的机会,我已经试过,但我仍得到相同的结果,00年1月1日 – Maddy 2011-12-16 11:16:53
您收到此,即使您运行的精确查询@chance已经发布?复制并粘贴? – Ollie 2011-12-16 11:37:24