2012-02-16 78 views

回答

40

嘗試添加月份(12 *年數)。像這個 -

add_months(date'2010-10-10', 48) 
16

使用add_months

例子:

SELECT add_months(to_date('10-OCT-2010'), 48) FROM DUAL; 

警告
ADD_MONTHS,返回結果月份的最後一天,如果你輸入一個月的最後一天首先。

因此add_months(to_date('28-feb-2011'),12)會因此而返回29-feb-2012。

6

我不知道,如果我理解正確你的問題,但

select add_months(someDate, numberOfYears * 12) from dual 

可能會做的伎倆

+0

也適用於閏年。 – ScrappyDev 2016-03-28 15:15:56

3

你可以試試這個:

someDate + interval '4' year

INTERVAL

+0

只是一個建議。避免使用INTERVAL數據類型。它符合ANSI/ISO標準。因此,您所寫的聲明將不適用於2月29日。通常,由您承擔結果是正確的。雖然add_months是Oracle專有的,並且可以生成有效日期。 – ibre5041 2013-10-29 08:40:50

+0

@ ibre5041對不起,從墳墓中提出這篇文章,但我正在尋找一種方法來做到這一點,而不是堅持計算生日的月份的最後一天,因爲add_month()失敗的2/28。當下一年是閏年時,add_months(to_date('02 -28','MM-DD'))返回02-29,這是不正確的。我發現做以下事情總是會返回正確的日期:(to_date('02 -28','MM-DD') - 1)+間隔'1'year + 1返回02-28,即使下一年是飛躍一年,如果你投入02-29,它將在非閏年返回03-01。 – Bob 2015-04-06 11:57:24

2

還有一個從ADD_MONTHS

SELECT 
     SYSDATE, 
     SYSDATE 
     + TO_YMINTERVAL ('1-0') 
FROM 
     DUAL; 


SYSDATE SYSDATE+TO_YMINTERVAL('1-0') 
--------- ---------------------------- 
29-OCT-13 29-OCT-14     
1 row selected. 


SELECT 
     SYSDATE, 
     SYSDATE 
     + TO_YMINTERVAL ('2-0') 
FROM 
     DUAL; 


SYSDATE SYSDATE+TO_YMINTERVAL('2-0') 
--------- ---------------------------- 
29-OCT-13 29-OCT-15     
1 row selected. 

SELECT 
     TO_DATE ('29-FEB-2004', 
       'DD-MON-YYYY') 
     + TO_YMINTERVAL ('1-0') 
FROM 
     DUAL 

    * 
Error at line 4 

ORA-01839: date not valid for month specified 

但最後一個是非法分開的選擇,因爲那裏是2月沒有29天在2005年,因此在閏年案例中失敗(2月29日)

同樣閱讀documentation