2009-08-23 18 views

Odpowiedz

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

Należy pamiętać, że 'CONCAT()' zwraca ciąg, nie ma wartości * true * 'DATETIME'. – CDuv

+0

CONCAT jest słaba - a co, jeśli czas jest> 24 godziny? – kbro

32

Aby uzyskać prawdziwą wartośćDATETIME ze swoimi dwoma oddzielnymi wartościami DATE i TIME:

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

Jaka jest strefa czasowa z tą próbą? – Muki

+4

Przypuszczam, że będzie to ten ustawiony w zmiennej systemowej '' time_zone' (http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone). Typ 'DATETIME' nie zapisuje strefy czasowej. – CDuv

+0

CONCAT jest słaba - użyj funkcji datetime do manipulowania datetime i funkcji ciągów do manipulowania ciągami. – kbro

0

Bez tworzenia i analizowania ciągów, wystarczy dodać interwał daty:

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; 

To jednak powoduje obcięcie mikrosekund.

Zgadzam się z Muki - pamiętaj o uwzględnieniu stref czasowych i czasu letniego!

6

Można użyć ADDTIME():

ADDTIME(CONVERT(date, DATETIME), time) 
  • date może być ciągiem data lub DATE przedmiot.
  • time może być łańcuchem czasowym lub obiektem TIME.

Testowany w MySQL 5.5.

24

Skopiowane z dokumentacji MySQL:

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

z jednym argumentem, funkcja ta zwraca wyrażenie datę lub datetime wyrażenie jako wartość datetime. Za pomocą dwóch argumentów dodaje wyrażenie wyrażeń expr2 do wyrażenia date lub wyrażenie datetime wyrażenie1 i zwraca wynik jako wartość typu data/godzina.

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

To powinna być zaakceptowana odpowiedź. –

+0

Tak, to powinna być zaakceptowana odpowiedź. – kbro