oracle中的日期比较以00结尾

时间:2011-12-16 11:02:06

标签: database oracle oracle10g oracle11g

对于字段01-01-1900,我的数据库中存储的日期为emp_doj(Data Type DATE)

但是在检索数据时,值为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

3 个答案:

答案 0 :(得分:4)

我怀疑它是您正在使用的IDE的默认NLS设置,它只显示两位数年份的日期。 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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

我有一些目前适合我的临时解决方案,我只是将我的选择查询更改为

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