在Oracle数据库中,您能告诉我为什么此查询返回FALSE
?
select
case
when to_date('01/01/1900','DD/MM/YYYY') >= (to_date(to_char(to_date('01/01/1900','DD/MM/YYYY')))) then 'TRUE'
else 'FALSE'
end
from DUAL;
我怎样才能拥有TRUE
?
我想比较两个相同的日期,一个是varchar2
,另一个是date
。
答案 0 :(得分:3)
如果您希望它相同,请对所有功能使用相同的格式:
select
case
when to_date('01/01/1900','DD/MM/YYYY') >=
(to_date(to_char(to_date('01/01/1900','DD/MM/YYYY'),'DD/MM/YYYY'),'DD/MM/YYYY')) then 'TRUE'
else 'FALSE'
end
from DUAL;
答案 1 :(得分:3)
我认为如果你运行答案很清楚:
select to_date('01/01/1900','DD/MM/YYYY'),
to_date(to_char(to_date('01/01/1900','DD/MM/YYYY')))
from DUAL;
在SQL Fiddle上,返回:
January, 01 1900 00:00:00 January, 01 2000 00:00:00
问题是Oracle的默认日期格式使用2位数年份:01-JAN-00
。您可以通过在每个步骤中包含显式格式来解决此问题:
select to_date('01/01/1900','DD/MM/YYYY'),
to_date(to_char(to_date('01/01/1900','DD/MM/YYYY'), 'DD/MM/YYYY'), 'DD/MM/YYYY')
from dual;