2009-08-23 2 views

ответ

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

Помните, что 'CONCAT()' возвращает строку, а не значение * true * 'DATETIME'. – CDuv

+0

CONCAT беден - что, если время> 24 часа? – kbro

32

Чтобы получить истинное значениеDATETIME из ваших двух отдельных DATE и TIME значения:

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

Какова временная зона с этой попыткой? – Muki

+4

Я предполагаю, что он будет установлен в системной переменной '' time_zone' (http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone). Тип DATETIME не сохраняет часовой пояс. – CDuv

+0

CONCAT is poor - используйте функции datetime для обработки данных в течение времени и строковых функций для манипуляции строками. – kbro

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)

С помощью одного аргумента, эта функция возвращает выражение даты или DateTime выражения в качестве значения даты и времени. С двумя аргументами он добавляет выражение времени expr2 к выражению даты или datetime 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

Это должен быть принятый ответ. –

+0

Да, это должен быть принятый ответ. – kbro

Смежные вопросы