【问题标题】:Oracle SQL: Dynamic timeframe calculationOracle SQL:动态时间范围计算
【发布时间】:2016-10-24 12:40:38
【问题描述】:

问候所有知道堆栈的人。

我有点迷茫,我希望能从蜂巢思维中得到一些友好的帮助。

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

例如;假设今天(2016 年 24 月 10 日)运行查询以获取注册日期为 14-07-2010 的记录,我希望脚本返回 14-07-2010 和 01-09 之间的天数差异- 2016

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

我对计算日期之间差异的过程很好,只是让查询返回“去年 9 月的第一天”到计算中的过程让我很头疼!

我们将不胜感激。

谢谢你=)

【问题讨论】:

    标签: sql oracle date


    【解决方案1】:

    试试这个方法:

    将当前日期添加四个月

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

    再减去四个月

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

    【讨论】:

    • 感谢您提供简单有效的解决方案!
    【解决方案2】:

    希望这可能会有所帮助。

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多