2008-12-29 83 views
2

我希望有人能幫助我解決這個問題。添加日期不超過一個月

我想添加一個月到一個數據庫日期,但我想要防止在這些日子結束兩個跳過月份。

比如我可能有:

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 

感謝您的幫助。

回答

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 
0

我認爲你必須把它寫在你自己的,我的建議是先於與「每月最後一天」評估此方法:

  • 添加一個月(不是30天,一個月!)
  • 查找每月的第一天(應該很容易)
  • 。減去一個一天

然後把它比作你的「加X天」的值,然後選擇最低的國家之一(我的理解背後的邏輯從1月31日跳到2月28日,但從2月28日到3月28日跳不出去)

0

這聽起來像是你想要當前月份加上一個月(在12月適當的翻轉)

以及該月份和當天最後一天的最小值。

1

我只是做: 選擇ADD_MONTHS(TO_DATE('30-DEC-08' ),2)雙

並得到 28-FEB-2009

無需使用LAST_DAY。如果你走了這條路線,你可以創建一個函數: 1.取日期 2.將當天更改爲月份的第一天。 3.添加一個月。 4.將當天的時間更改爲當月的LAST_DAY。