添加日期不超过一个月

时间:2008-12-29 12:29:02

标签: sql oracle function date math

我希望有人能帮助我。

我想在数据库日期添加一个月,但我希望在最后的那些日子里防止两个月跳过。

例如我可能有:

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 

感谢您的帮助。

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:2)

答案 2 :(得分:1)

我刚刚做了: 从双

中选择add_months(TO_DATE('30 -DEC-08'),2)

得到了 28-FEB-2009

无需使用LAST_DAY。如果你走了那条路,你可以创建一个函数: 1.约会 2.将当天更改为本月的第一天。 3.加一个月。 4.将当天更改为该月的LAST_DAY。

答案 3 :(得分:0)

我认为你必须自己写,我的建议是先用这种方法评估“月末的最后一天”:

  • 添加一个月(不是30天,一个月!)
  • 查找当月的第一天(应该很容易)
  • 减去一天

然后将它与你的“加x天”值进行比较,并选择最低值(我理解从31/1月到28日/ 2月跳跃背后的逻辑,但是我不知道从28-跳跃2月28日至3月28日)

答案 4 :(得分:0)

听起来你想要当前月加一(12月适当的翻转)

以及当月和当天的最后一天的最小值。