我希望有人能帮助我。
我想在数据库日期添加一个月,但我希望在最后的那些日子里防止两个月跳过。
例如我可能有:
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
感谢您的帮助。
答案 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)
我认为你正在寻找LAST_DAY:
http://download.oracle.com/docs/cd/B28359_01/olap.111/b28126/dml_functions_2006.htm
答案 2 :(得分:1)
我刚刚做了: 从双
中选择add_months(TO_DATE('30 -DEC-08'),2)得到了 28-FEB-2009
无需使用LAST_DAY。如果你走了那条路,你可以创建一个函数: 1.约会 2.将当天更改为本月的第一天。 3.加一个月。 4.将当天更改为该月的LAST_DAY。
答案 3 :(得分:0)
我认为你必须自己写,我的建议是先用这种方法评估“月末的最后一天”:
然后将它与你的“加x天”值进行比较,并选择最低值(我理解从31/1月到28日/ 2月跳跃背后的逻辑,但是我不知道从28-跳跃2月28日至3月28日)
答案 4 :(得分:0)
听起来你想要当前月加一(12月适当的翻转)
以及当月和当天的最后一天的最小值。