【发布时间】:2010-11-22 01:30:21
【问题描述】:
在 MySQL 中有没有办法从给定的 DATE 类型的属性和给定的 TIME 类型的属性创建 DATETIME?
【问题讨论】:
-
但你为什么要这么做?
在 MySQL 中有没有办法从给定的 DATE 类型的属性和给定的 TIME 类型的属性创建 DATETIME?
【问题讨论】:
复制自 MySQL 文档:
TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
使用单个参数,此函数将日期或日期时间表达式 expr 作为日期时间值返回。使用两个参数,它将时间表达式 expr2 添加到日期或日期时间表达式 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'
【讨论】:
要从您的两个单独的 DATE 和 TIME 值中获取 true DATETIME 值:
STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s')
【讨论】:
time_zone system variable 中的一组。 DATETIME 类型不存储时区。
你可以使用ADDTIME():
ADDTIME(CONVERT(date, DATETIME), time)
date 可以是日期字符串或DATE 对象。time 可以是时间字符串或TIME 对象。在 MySQL 5.5 中测试。
【讨论】:
datetime = CONCAT(date, ' ', time);
【讨论】:
CONCAT() 返回一个字符串,没有 true DATETIME 值。
不用创建和解析字符串,只需给日期加一个间隔即可:
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 的观点 - 请务必考虑时区和夏令时!
【讨论】:
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');
【讨论】: