2010-11-17 124 views
1

爲了簡單起見,我有一個表中的兩個字段:用另一個字段中的單個INT更新MySQL日期字段?

  • 日期1(YYYY-MM-DD格式)
  • 日(單或兩位數字的天格式,1-31)

我希望能夠使用Day內的值更新Date 1,但我不想多次調用(首先選擇,讀取結果,然後使用同一個表的結果更新)。

最終在我的呼叫的 '設計'(其不工作)將是:

UPDATE SET表日期1 = DATE(Y-(M + 1) - 天的(值) );

或在PHP中:

date("Y-m-d", mktime(0,0,0,date('m')+1, VALUE(Day), date('Y'))); 

這可能嗎?

UPDATE

==

雖然我已經能夠利用一些下面的代碼,我不知道MySQL是「聰明」,足以運行計算,因爲我有它。我的新代碼是:

UPDATE表設置日期1 = CONCAT(YEAR(CURDATE()), ' - ',MONTH(ADDDATE(CURDATE(), 間隔1個月)), ' - ', Day1)

雖然這會返回正確的「新月」和「新的一天」,但噹噹月是十二月時,年份將錯誤。

例如:如果當前日期是2010-12-02。 Day字段中的首選數據爲12.處理完腳本後,Date 1字段應更新爲2011-01-12,但在上面的代碼中,它只會輸出到2010-01-12。

+0

我不明白你在做什麼。 「日」是否存儲實際的日期日期編號,或者是否將其遞增?我認爲擺脫你的Day字段和使用日期操作函數會讓你更容易。通過使用兩列來存儲您可以從其中獲得的相同數據,會產生很大的風險。 – Cfreak 2010-11-17 15:47:20

+0

@Cfreak - 它不是相同的數據。日期1字段可以隨時更新,但是當某些操作發生時,該字段的DAY部分將更新爲存儲在日期字段中的值。至於你的最後一點,有兩個「類似」數據的字段,其中一個是tinyint並不是「很大的風險」 – JM4 2010-11-17 15:49:25

回答

1

沒有測試過,但我認爲你缺少的是CONCAT

UPDATE table SET datefield = CONCAT(YEAR(datefield),'-',MONTH(datefield),'-',dayfield); 

重讀你questioon後,這聽起來像你想添加的天,那會是這樣(沒有測試過,太 - 看看DATE_ADD and INTERVAL):

UPDATE table SET datefield = DAT_ADD(datefield, INTERVAL dayfield DAYS); 
+0

你有問題的第一部分是完全正確的,現在唯一的'額外'是增加MONTH值由一個(所以當記錄被更新時,月份增加一個,日期值被改變(如你的代碼那樣)並且年份相應地相應(即如果更新發生在2010年12月2日;日期字段是12;在進程運行後,日期1現在是2011年1月12日 – JM4 2010-11-17 16:11:54

+0

我不希望'添加'天,只能將該天改爲下一個月。 – JM4 2010-11-17 16:13:58

相關問題