Oracle:确定日期是在当前,过去还是将来?

时间:2016-03-25 09:58:12

标签: sql oracle date time compare

我想写一个SQL查询,它将返回'过去'现在'或者' FUTURE'基于给定日期:

今天是2016-03-25

SELECT 
    TO_DATE('2016-03-01', 'YYYY-MM-DD') - TO_DATE(SYSDATE, 'YYYY-MM-DD') 
FROM 
    DUAL;

此查询返回:727185

所以,当我这样做时:

select decode(sign( TO_DATE('2049-03-31', 'YYYY-MM-DD') - TO_DATE(CURRENT_DATE, 'YYYY-MM-DD')  ), 
              -1 , 'PAST' , 
               0 , 'PRESENT' ,
                'FUTURE') 
  from dual;

我的查询结果总是FUTURE,因为返回的数字始终是> 0

我该如何做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:1)

你可以用不同的方式做到这一点;最可读的(对我来说)是这样的:

with test(d) as ( select TO_DATE('2016-03-01', 'YYYY-MM-DD') from dual)
select case 
       when trunc(d) = trunc(sysdate) then 'PRESENT'
       when trunc(d) > trunc(sysdate) then 'FUTURE'
       when trunc(d) < trunc(sysdate) then 'PAST'
       end
from test

答案 1 :(得分:-2)

你应该使用:

select decode(sign( TO_DATE('2015-03-31', 'YYYY-MM-DD') - CURRENT_DATE  ), 
              -1 , 'PAST' , 
               0 , 'PRESENT' ,
                'FUTURE') 
  from dual;

因为:

select TO_DATE(CURRENT_DATE, 'YYYY-MM-DD') from dual

- &GT;结果:3/16/0025 0025年