2009-08-23 61 views
33

MySQL中是否可以通過DATE類型的給定屬性和TIME類型的給定屬性創建DATETIME?從DATE和TIME創建DATETIME

+0

但是,爲什麼要這樣做呢? – 2015-08-18 06:33:09

回答

17
datetime = CONCAT(date, ' ', time); 
+9

請注意,'CONCAT()'返回一個字符串,而不是*真*'DATETIME'值。 – CDuv 2014-01-05 00:06:46

+0

CONCAT很差 - 如果時間> 24小時,該怎麼辦? – kbro 2016-12-19 16:14:09

32

要從兩個獨立DATETIME值獲得真正DATETIME值:

STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s') 
+0

這次嘗試的時區是什麼? – Muki 2014-02-12 14:57:03

+4

我想這將是['time_zone'系統變量](http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone)中的設置。 'DATETIME'類型不存儲時區。 – CDuv 2014-02-12 23:26:07

+0

CONCAT很差 - 使用日期時間函數進行日期時間操作,並使用字符串函數進行字符串操作。 – kbro 2016-12-19 16:21:49

0

,而無需創建和解析字符串,只需要加一個時間間隔日期:

set @dt_text = '1964-05-13 15:34:05.757' ; 
set @d = date(@dt_text) ; 
set @t = time(@dt_text) ; 
select @d, @t, @d + interval time_to_sec(@t) second; 

但是這會截斷微秒。

我同意Muki - 一定要考慮時區和夏令時!

6

你可以使用ADDTIME()

ADDTIME(CONVERT(date, DATETIME), time) 
  • date有可能是日期字符串或DATE對象。
  • time可能是時間字符串或TIME對象。

在MySQL 5.5中測試。

24

從MySQL文檔複製:

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

隨着一個參數,此函數返回的日期或日期時間表達式expr作爲日期時間值。使用兩個參數,它將時間表達式expr2添加到日期或日期時間表達式expr1,並將結果作爲日期時間值返回。

mysql> SELECT TIMESTAMP('2003-12-31'); 
    -> '2003-12-31 00:00:00' 
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00'); 
    -> '2004-01-01 00:00:00' 
+4

這應該是被接受的答案。 – 2016-11-15 19:52:00

+0

是的,這應該是被接受的答案。 – kbro 2016-12-19 16:19:59

相關問題