Oracle SQL:动态时间范围计算

时间:2016-10-24 12:40:39

标签: sql oracle date

所有人都知道Stack。

我有点发脾气,我希望能从蜂巢中获得一些友好的帮助。

我需要编写一个查询,返回注册日期(存储在表格列中)与去年9月第一天之间的天数差异。

例如;假设今天(24-10-2016)正在运行查询,注册日期为14-07-2010,我希望脚本能够返回14-07-2010和01-09之间的天数差异。 2016

但是,如果我在去年8月底之前运行相同的查询,例如2016年12月12日,我希望脚本能够返回14-07-2010和01-09-2015之间的天数差异。

我很好地计算了日期之间的差异,这只是让查询将“去年9月的第一天”返回到绊倒我的计算中的过程!

非常感谢所提供的任何输入。

谢谢你=)

2 个答案:

答案 0 :(得分:5)

尝试这种方法:

在当前日期添加四个月

将此日期截断为年度的第一天

再减去四个月

Add_Months(Trunc(Add_Months(SYSDATE, 4), 'year'), -4)

答案 1 :(得分:0)

希望这可能有所帮助。

WITH T AS (SELECT TO_DATE('14-07-2010','DD-MM-YYYY') REG_DATE,
                  SYSDATE EXEC_DATE
           FROM DUAL)
SELECT CASE WHEN TO_CHAR(EXEC_DATE,'MM') >= 9 
               THEN ADD_MONTHS(TRUNC(EXEC_DATE,'YEAR'),8) 
            ELSE ADD_MONTHS(TRUNC(ADD_MONTHS(EXEC_DATE,-12),'YEAR'),8)  
       END 
       - REG_DATE AS DIFF
FROM T;