English 中文(简体)
添加日期,不要超过一个月。
原标题:
  • 时间:2008-12-29 12:29:01
  •  标签:

我希望有人能帮助我。

我想在数据库日期上添加一个月,但我想要防止在月末这些日期出现两个跳跃月份。

例如,我可能有:

2009年1月31日

这句话的意思不够明确,需要上下文来理解,请提供更多的句子或背景。

2009年2月28日

而不是 (ér bù shì)

2009年3月2日

下一个日期将是?

2009年3月28日

2009年6月28日

等等。

在Oracle中是否已经有执行此类操作的函数?

编辑

是的。我想将每个月所有带有某些状态的记录复制到下一个月(这样用户就不必每个月再次输入2,000行)。 (shì de. wǒ xiǎng jiāng měi gè yuè suǒ yǒu dài yǒu mǒu xiē zhuàngtài de jìlù fùzhì dào xià yī gè yuè (zhèyàng yònghù jiù bùbì měi gè yuè zài cì shū rù 2,000 háng).)

我可以手动提取所有记录并更新日期(以命令式方式),但我宁愿让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 

谢谢你的帮助。

最佳回答

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
问题回答

我认为你在寻找LAST_DAY:

将此翻译为中文:http://download.oracle.com/docs/cd/B28359_01/olap.111/b28126/dml_functions_2006.htm http://download.oracle.com/docs/cd/B28359_01/olap.111/b28126/dml_functions_2006.htm

I just did: select add_months(TO_DATE( 30-DEC-08 ), 2) from dual

and got 28-FEB-2009

No need to use LAST_DAY. If you went that route, you could create a function that: 1. takes a date 2. Changes the day to the first of the month. 3. Add a month. 4. Changes the day to the LAST_DAY for that month.

我认为你需要自己写下来,我的建议是先用这种方法评估“月底”的情况:

  • Add one month (not 30 days, one month!)
  • Find first day of the month (should be easy)
  • substract one day

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

听起来你想要当前月份加一(在12月份适当地滚动)

并且取那个月的最后一天和当前日期的最小值。





相关问题
热门标签