2009-08-23 22 views

risposta

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

Si noti che 'CONCAT()' restituisce una stringa, non un valore * true * 'DATETIME'. – CDuv

+0

CONCAT è scarso - cosa succede se il tempo è> 24 ore? – kbro

32

Per ottenere un vero valore DATETIME dai due valori DATE e TIME separate:

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

Qual è il fuso orario con questo tentativo? – Muki

+4

Immagino che sarà quello impostato nella variabile di sistema ['time_zone'] (http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone). Il tipo 'DATETIME' non memorizza il fuso orario. – CDuv

+0

CONCAT è scadente: utilizzare le funzioni datetime per la manipolazione datetime e le funzioni stringa per la manipolazione delle stringhe. – kbro

0

Senza creare e analizzare le stringhe, basta aggiungere un intervallo per la data:

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; 

Tuttavia, tronca i microsecondi.

Sono d'accordo con Muki - assicuratevi di tenere conto dei fusi orari e dell'ora legale!

6

Potreste usare ADDTIME():

ADDTIME(CONVERT(date, DATETIME), time) 
  • date può essere una stringa di data o un oggetto DATE.
  • time può essere una stringa di tempo o un oggetto TIME.

Testato in MySQL 5.5.

24

Copied dalla documentazione MySQL:

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

Con il singolo argomento, questa funzione restituisce l'espressione data o datetime expr come valore datetime. Con due argomenti, aggiunge l'espressione temporale expr2 alla data o espressione datetime expr1 e restituisce il risultato come valore datetime.

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

Questa dovrebbe essere la risposta accettata. –

+0

Sì, questa dovrebbe essere la risposta accettata. – kbro