一尘不染

添加日期不超过一个月

sql

我希望有人可以帮助我。

我想在数据库日期中增加一个月,但我想防止在最后一天的两个月中跳过两个月。

例如,我可能有:

2009年1月31日

我想得到

2009年2月28日

并不是

2009年3月2日

下一个日期是

2009年3月28日

2009年6月28日

等等。

oracle中是否已经有执行这种操作的功能?

编辑

是的 我想每个月将具有某些状态的所有记录复制到下一个(因此用户不必每月再次输入2,000行)

我可以获取所有记录并手动更新日期(以一种必要的方式),但是我宁愿让SQL来完成这项工作。

就像是:

insert into the_table 
select f1,f2,f3, f_date + 30 /* sort of ... :S */  from the_Table where date > ?

但是问题出在最后一天。

在我必须编写这样的代码之前有任何想法吗?

for each record in 
   createObject( record )
   object.date + date blabala
   if( date > 29 and if februrary and the moon and the stars etc etc 9

end

update....  et

编辑:2

增加几个月就成功了。

现在我有这个:

insert into my_table
select f1, add_months( f2, 1 ) from my_table where status = etc etc

谢谢您的帮助。


阅读 141

收藏
2021-03-08

共1个答案

一尘不染

Oracle具有一个内置函数ADD_MONTHS,该函数可以完全做到这一点:

SQL> select add_months(date '2008-01-31',1) from dual;

ADD_MONTHS(
-----------
29-FEB-2008

SQL> select add_months(date '2008-02-29',1) from dual;

ADD_MONTHS(
-----------
31-MAR-2008
2021-03-08