2015-04-16 54 views
1

我需要一個查詢,可以從oracle中的當前系統日期獲取最近12個月的結束日期。如何在Oracle中獲得最近12個月的結束日期

下面是我使用的Oracle

select 
    trunc(add_months(sysdate,level-1),'MM') first_day, 
    last_day(add_months(sysdate,level-1)) last_day 
    from dual 
connect by level<=12; 
+0

您的查詢有什麼問題?我可以看到它解決了這個任務,不是嗎? –

+0

這個查詢給我從現在到未來的12個月。但我需要過去的12個月。 –

+2

只需讓你的等級-1爲負數。 選擇 TRUNC(ADD_MONTHS(SYSDATE,-1 *(水平-1)), 'MM')FIRST_DAY, LAST_DAY(ADD_MONTHS(SYSDATE,-1 *(1級)))從LAST_DAY雙 通過水平連接<= 12; – Levesque

回答

1
select 
     trunc(add_months(sysdate-numtoyminterval(1, 'YEAR'),level-1),'MM') first_day, 
     last_day(add_months(sysdate-numtoyminterval(1, 'YEAR'),level-1)) last_day 
from dual 
connect by level<=12; 

而是現在開始,即sysdate樣本查詢,一開始會在一年前:sysdate-numtoyminterval(1, 'YEAR')

+1

如果在閏日運行,計算將失敗 - 因爲上一年沒有2月29日。你可以看到'select date'2012-02-29' - numtoyminterval(1,'YEAR')from dual'。目前最後一天是保持現在的時間,你可能並不是真正想要的,但我看到OP也是這樣。 –

1

試試這個請:

SELECT TRUNC (ADD_MONTHS (SYSDATE, -(LEVEL - 1)), 'MM') FIRST_DAY, 
      LAST_DAY (ADD_MONTHS (SYSDATE, -(LEVEL - 1))) LAST_DAY 
     FROM DUAL 
CONNECT BY LEVEL <= 12; 
+1

last_day保持當前時間,你可能不想真正需要sysdate,儘管OP的版本也是如此。 –

+0

與TRUNC的問題的作者可以簡單地解決。 – UltraCommit

+1

哦,是的,只是指出了OP的好處,因爲它不會很明顯,除非NLS_DATE_FORMAT顯示時間,並可能導致奇怪的影響。也許我應該評論一下這個問題,來想一想吧! –

相關問題