2011-12-08 266 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日。 –