2016-10-24 75 views
1

問候所有知道堆棧。Oracle SQL:動態時間表計算

我在一片鹹菜中,我希望能從蜂巢的心靈獲得一些友好的幫助。

我需要編寫一個查詢,返回註冊日期(存儲在表列中)和上一個9月的第一天之間的天數差異。

例如;假設查詢今天(24-10-2016)在註冊日期爲14-07-2010的記錄中運行,我希望腳本返回14-07-2010和01-09- 2016

但是,如果我在去年8月底之前運行過相同的查詢,例如2016年8月12日,我希望腳本能夠返回14-07-2010和01-09- 2015年。

我很喜歡計算日期之間差異的過程,它只是將查詢返回到'去年9月的第一天'進入計算過程中,讓我絆倒!

提供的任何輸入將不勝感激。

Thankyou =)

回答

5

試試這個辦法:

4個月

截此日期添加到當前日期的第一年

減再次4個月

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

感謝簡單而有效的解決方案! – RDG

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;