Создание DATETIME из даты и времени - PullRequest
39 голосов
/ 23 августа 2009

Есть ли способ в MySQL создать DATETIME из заданного атрибута типа DATE и заданного атрибута типа TIME?

Ответы [ 6 ]

39 голосов
/ 20 октября 2016

Скопировано из документации MySQL:

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

С одним аргументом эта функция возвращает выражение даты или выражения даты и времени в качестве значения даты и времени. С двумя аргументами он добавляет выражение времени expr2 к выражению даты или даты и времени expr1 и возвращает результат в виде значения 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'
37 голосов
/ 05 января 2014

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

STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s')
17 голосов
/ 23 августа 2009
datetime = CONCAT(date, ' ', time);
10 голосов
/ 12 октября 2016

Вы можете использовать ADDTIME():

ADDTIME(CONVERT(date, DATETIME), time)
  • date может быть строкой даты или DATE объектом.
  • time может быть строкой времени или объектом TIME.

Протестировано в MySQL 5.5.

0 голосов
/ 08 января 2019
select timestamp('2003-12-31 12:00:00','12:00:00'); 

работает, когда строка отформатирована правильно. В противном случае вы можете просто включить время, используя str_to_date.

select str_to_date('12/31/2003 14:59','%m/%d/%Y %H:%i');
0 голосов
/ 02 октября 2014

Не создавая и не анализируя строки, просто добавьте интервал к дате:

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;

Однако это усекает микросекунды.

Я согласен с Муки - обязательно учтите часовой пояс и летнее время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...