我想写一个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年