对于字段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
答案 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')