2014-07-09 73 views
0

發展是本地主機上運行的版本5.6.16,產量是73年5月1日-CLLDATE_ADD回到生產服務器上NULL,從事開發工作

此查詢的DATE_ADD返回生產NULL,但在發展究竟是幹什麼的我希望它(在game_time列中增加90分鐘),game_time列是一個字符串,它包含以下格式的時間:'21:00'。 這是查詢:

SELECT TIME(game_time), 
     DATE_ADD(TIME(game_time), 
     INTERVAL 90 MINUTE), 
     TIME(NOW()) 
    FROM games 

這是怎麼回事?我究竟做錯了什麼?

我知道時間應該在TIMESTAMP或TIME中,但我正在工作某人elses代碼,我沒有從頭開始自己。

我也只注意到TIME()返回不同的東西,在發展中,TIME('21:00' )返回21:00:00.000000,在生產中我只得到21:00:00

管理得周圍,不漂亮,但它的作品。

SEC_TO_TIME(TIME_TO_SEC(TIME(game_time))+5400) 

回答

0

嘗試轉換移動到時間DATE_ADD外: -

SELECT TIME(game_time), TIME(DATE_ADD(game_time, INTERVAL 90 MINUTE)), TIME(NOW()) 
FROM games 

DATE_ADD工作在一個日期或日期時間字段,因爲它是你傳遞一個時間域。

1

您更好地使用相同的版本與生產服務器開發:

你的舊版本將您TIME值轉換爲一個日期,因爲它是一個無效的日期,它會得到NULL,見手冊章Conversion Between Date and Time Types

下面是相關的部分:

5.6.4之前,MySQL的解析時間的字符串值作爲一個日期或時間值的日期或日期和時間 值轉換3210日期和時間。這不太可能有用。例如,解釋爲日期的'23:12:31' 變爲'2023-12-31'。時間值無效,因爲 日期變爲'0000-00-00'或NULL。

編輯:

要獲得TIME值與期望的結果,你可以使用ADDTIME。 這可能是工作:

SELECT TIME(game_time), 
    ADDTIME (TIME(CONCAT(CURDATE(), ' ', game_time))), 
    '01:30:00'), 
    TIME(NOW()) 
FROM games 

未經檢驗的,因爲我沒有這樣的舊的MySQL版本了。

+0

啊,所以我可能不得不使用STR_TO_DATE呢?我設法從STR_TO_DATE得到我想要的,但是一旦我把它放入DATE_ADD函數中,我仍然得到NULL。 – aabreu

+0

TIME返回我想要的,這完美地工作:SEC_TO_TIME(TIME_TO_SEC(TIME(game_time))+ 5400) – aabreu

相關問題