2011-12-08 243 views

回答

5
select (sysdate + interval '1' year) from dual 

更新(見賈斯汀洞的評論)

select decode(to_char(sysdate, 'mmdd'), 
       '0229', 
       (sysdate-1) + interval '1' year, 
       (sysdate + interval '1' year)) 
from dual; 
+0

@ A.B。凱德 - 小心添加年份和月份的時間間隔。如果你在2008年2月29日增加一年,結果將是一個例外,而不是2009年2月28日。 –

4

你可以做這樣的事情查詢

select add_months(to_date('08/12/2011','dd/mm/yyyy'),12) from dual; 
+0

這應該做工精細.... !!! –

+1

要小心那個:a--它不是ANSI; b - 如果你試試add_months(to_date('28/02/2011','dd/mm/yyyy'),12)你會得到** 29 **/02/20012而不是** 28 **/02/2012按預期 –

+1

@ABCade - 確實。但是,這通常比收到異常(ORA-01839:日期無效,指定月份有效)更好2012年2月29日添加一年時間間隔 –

4
SELECT current_date + INTERVAL '1' YEAR FROM dual; 

閱讀有關pros and cons in this thread。 2月29日添加INTERVAL '1' YEAR可能會失敗。感謝@Justin的提示。
(它在PostgreSQL中不會失敗,您將在2月28日獲得非閏年)。

Interval Literals in the Oracle manual

+1

@EErwin - 在日期中添加年份和月份間隔時要小心。如果你在2008年2月29日增加一年,結果將是一個例外,而不是2009年2月28日。 –