Sql 添加日期,但不超过一个月

Sql 添加日期,但不超过一个月,sql,oracle,function,date,math,Sql,Oracle,Function,Date,Math,我希望有人能在这方面帮助我 我想在数据库日期中添加一个月,但我想防止在最后的那些日子里有两个月跳转 例如,我可能有: 2009年1月31日 我想得到 2009年2月28日 而不是 2009年3月2日 下一个日期是 2009年3月28日 2009年6月28日 等等 oracle中是否有已经执行此类操作的函数 编辑 是的。我希望每月将所有具有某种状态的记录复制到下一个记录(这样用户就不必每月再次输入2000行) 我可以获取所有记录并手动更新日期(这是一种必须的方式),但我宁愿让SQL来完成这项工作

我希望有人能在这方面帮助我

我想在数据库日期中添加一个月,但我想防止在最后的那些日子里有两个月跳转

例如,我可能有:

2009年1月31日

我想得到

2009年2月28日

而不是

2009年3月2日

下一个日期是

2009年3月28日

2009年6月28日

等等

oracle中是否有已经执行此类操作的函数

编辑

是的。我希望每月将所有具有某种状态的记录复制到下一个记录(这样用户就不必每月再次输入2000行)

我可以获取所有记录并手动更新日期(这是一种必须的方式),但我宁愿让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 

谢谢你的帮助。

我想你在寻找最后一天:


我想你必须自己写,我的建议是首先用以下方法评估“月的最后一天”:

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

然后将其与您的“加x天”值进行比较,并选择最低的一个(我理解从1月31日跳到2月28日的逻辑,但我不理解从2月28日跳到3月28日的逻辑)

听起来您想要当前月份加1(在12月进行适当的滚动)


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

Oracle有一个内置函数,它可以实现以下功能:

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
我只是: 从dual中选择添加月份(至日期('2008年12月30日'),2)

得到 2009年2月28日

无需使用最后一天。如果您选择了该路线,您可以创建一个函数: 1.约会 2.将日期更改为每月的第一天。 3.加上一个月。 4.将日期更改为该月的最后一天