2009-08-23 12 views

Antwort

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

Beachten Sie, dass 'CONCAT()' einen String zurückgibt, keinen * true * 'DATETIME'-Wert. – CDuv

+0

CONCAT ist schlecht - was ist, wenn die Zeit> 24 Stunden ist? – kbro

32

Um einen wahrDATETIME Wert von Ihren zwei separaten DATE und TIME Werten zu erhalten:

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

Was ist die Zeitzone bei diesem Versuch? – Muki

+4

Ich denke, es wird der eine sein, der in [Systemzeitvariable] gesetzt wird (http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone). 'DATETIME' Typ speichert keine Zeitzone. – CDuv

+0

CONCAT ist schlecht - verwenden Sie Datetime-Funktionen für die Datetime-Manipulation und String-Funktionen für die String-Manipulation. – kbro

0

Ohne das Erstellen und Strings Parsen nur ein Intervall zu dem Datum hinzu:

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; 

Allerdings verkürzt dies die Mikrosekunden.

Ich stimme Muki zu - achten Sie darauf, Zeitzonen und Sommerzeit zu berücksichtigen!

6

Sie könnten ADDTIME() verwenden:

ADDTIME(CONVERT(date, DATETIME), time) 
  • date kann ein Datum String oder ein DATE Objekt sein.
  • time kann eine Zeitzeichenfolge oder ein TIME Objekt sein.

Getestet in MySQL 5.5.

24

aus der MySQL-Dokumentation kopiert:

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

Mit einem einzigen Argumente, diese Funktion gibt das Datum oder Datumzeit Ausdruck ausdr als Datumswert. Mit zwei Argumenten fügt es dem Ausdruck date oder datetime den Ausdruck expr2 hinzu und gibt das Ergebnis als datetime-Wert zurück.

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

Dies sollte die akzeptierte Antwort sein. –

+0

Ja, das sollte die akzeptierte Antwort sein. – kbro