Oracle:确定日期是现在、过去还是将来



我想写一个SQL查询,根据给定日期返回"PAST"、"PRESENT"或"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。

我怎样才能做到这一点?

谢谢。

您可以用不同的方式来实现这一点;(对我来说)最可读的是这样的东西:

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

您应该使用:

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

->结果:3/16/00250025年

相关内容

  • 没有找到相关文章

最新更新