日期和以char表示的日期之间的比较

时间:2015-05-18 16:00:50

标签: sql oracle

在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

2 个答案:

答案 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;