2016-04-25 30 views
0

在休息,我在我的表有三列:這個簡單的MySQL語法有什麼問題?總結日期

start - 時間戳,默認值是CURRENT_TIMESTAMP

duration - 日期時間,通常0000-00-07 00:00:00(一週)

end - 時間戳,默認值是0000-00-00 00:00:00

這是我做的:

UPDATE `banners` SET `end` = `start` + `duration` WHERE `id` = 93 

沒有出現任何錯誤,則id是準確的 - 但操作不執行,該end場只保持在零。

怎麼了?任何引號,括號都需要嗎?我也嘗試使中間字段時間戳類型以及沒有結果。

+0

使持續時間成爲代表日期的整數minu tes,秒或任何對您的應用程序有意義的東西。 –

回答

0

如果持續時間通常爲1周,你可以使用MySQL

DATE_ADD()功能
DATE_ADD(start,INTERVAL 7 DAY) 

希望幫助

0

不能添加DATETIME值添加數字相同的方式。 April 25, 2016添加到January 5, 2016的含義是什麼?

你應該存儲你的duration s使用最小的時間單位,可以用它們來表示它們的整數,並使用MySQL DATE_ADD()功能,而不是添加。

例如,如果duration1 WEEK那麼你可以使用任何的:

UPDATE `banners` SET `end` = DATE_ADD(`start`, INTERVAL 1 WEEK) WHERE `id` = 93 

UPDATE `banners` SET `end` = DATE_ADD(`start`, INTERVAL 7 DAY) WHERE `id` = 93 

UPDATE `banners` SET `end` = DATE_ADD(`start`, INTERVAL 168 HOUR) WHERE `id` = 93 
+0

你可以在轉換它們後添加DATETIME值,然後你必須將它們轉換回 – Barry

+0

@Barry將它們轉換爲什麼? – axiac

+0

使用http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_unix-timestamp – Barry

1

很有可能,只是在代碼方面有點難看......

UPDATE `banners` 
SET `end` = FROM_UNIXTIME(UNIX_TIMESTAMP(`start`) + (UNIX_TIMESTAMP(`duration`) - UNIX_TIMESTAMP('1970-01-01 00:00:00')),'%Y-%d-%m %h:%i') 
WHERE `id` = 93 

...你只需要將所有內容都轉換爲秒數,然後將時間從第二個轉換爲日期時間字符串,然後再轉換爲日期時間字符串:)