我想写一个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
我该如何做到这一点?
谢谢。
答案 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年