【发布时间】:2012-03-07 23:11:41
【问题描述】:
我有一个日期字段
DATE = 10/10/2010
sum = 4(这是计算的年数)
有没有办法在 2010 年 10 月 10 日加上四年并成功 2014 年 10 月 10 日?
【问题讨论】:
标签: oracle oracle10g date-arithmetic
我有一个日期字段
DATE = 10/10/2010
sum = 4(这是计算的年数)
有没有办法在 2010 年 10 月 10 日加上四年并成功 2014 年 10 月 10 日?
【问题讨论】:
标签: oracle oracle10g date-arithmetic
尝试添加月份(12 * 年数)。像这样-
add_months(date'2010-10-10', 48)
【讨论】:
使用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。
【讨论】:
我相信你可以使用ADD_MONTHS() 函数。 4 年是 48 个月,所以:
add_months(DATE,48)
以下是使用该功能的一些信息:
http://www.techonthenet.com/oracle/functions/add_months.php
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361
【讨论】:
我不确定我是否正确理解了您的问题,但是
select add_months(someDate, numberOfYears * 12) from dual
可能会成功
【讨论】:
【讨论】:
select (to_date('01-31','mm-dd') -1 ) + interval '1' month +1 from dual; 总是与ORA-01839: date not valid for month specified 发生冲突。
除了 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
但最后一个是非法的,因为 2005 年没有 2 月 29 日,因此它在闰年情况下(2 月 29 日)失败
同样阅读documentation
【讨论】:
SELECT TO_CHAR(SYSDATE,'YYYY')-2 ANO FROM DUAL
【讨论】: