我需要一個查詢,可以從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;
我需要一個查詢,可以從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;
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')
如果在閏日運行,計算將失敗 - 因爲上一年沒有2月29日。你可以看到'select date'2012-02-29' - numtoyminterval(1,'YEAR')from dual'。目前最後一天是保持現在的時間,你可能並不是真正想要的,但我看到OP也是這樣。 –
試試這個請:
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;
last_day保持當前時間,你可能不想真正需要sysdate,儘管OP的版本也是如此。 –
與TRUNC的問題的作者可以簡單地解決。 – UltraCommit
哦,是的,只是指出了OP的好處,因爲它不會很明顯,除非NLS_DATE_FORMAT顯示時間,並可能導致奇怪的影響。也許我應該評論一下這個問題,來想一想吧! –
您的查詢有什麼問題?我可以看到它解決了這個任務,不是嗎? –
這個查詢給我從現在到未來的12個月。但我需要過去的12個月。 –
只需讓你的等級-1爲負數。 選擇 TRUNC(ADD_MONTHS(SYSDATE,-1 *(水平-1)), 'MM')FIRST_DAY, LAST_DAY(ADD_MONTHS(SYSDATE,-1 *(1級)))從LAST_DAY雙 通過水平連接<= 12; – Levesque