从 DATE 和 TIME 创建 DATETIME
Posted
技术标签:
【中文标题】从 DATE 和 TIME 创建 DATETIME【英文标题】:Creating DATETIME from DATE and TIME 【发布时间】:2010-11-22 01:30:21 【问题描述】:在 mysql 中有没有办法从给定的 DATE 类型的属性和给定的 TIME 类型的属性创建 DATETIME?
【问题讨论】:
但你为什么要这么做? 【参考方案1】:复制自 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'
【讨论】:
这几乎是正确的,但在 mysql 中存在两种数据类型,即日期时间和时间戳。因为这实际上是返回一个时间戳,所以它没有回答问题,但它已经接近了。 @ChristopherBonitz 你是正确的,mysql 同时具有 TIMESTAMP 和 DATETIME,但是这个函数的名称具有误导性,它实际上确实返回了一个 DATETIME,如果 mysql 简单地将它命名为 datetime() 我想人们会少得多困惑。【参考方案2】:要从您的两个单独的 DATE
和 TIME
值中获取 true DATETIME
值:
STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s')
【讨论】:
这次尝试的时区是什么? 我猜这将是time_zone
system variable 中的一组。 DATETIME
类型不存储时区。
CONCAT 很差 - 使用日期时间函数进行日期时间操作,使用字符串函数进行字符串操作。【参考方案3】:
你可以使用ADDTIME()
:
ADDTIME(CONVERT(date, DATETIME), time)
date
可以是日期字符串或DATE
对象。
time
可以是时间字符串或TIME
对象。
在 MySQL 5.5 中测试。
【讨论】:
这是执行此操作的方法,您可以通过运行此 SELECT ADDTIME(CONVERT(DATE('2018-05-21'), DATETIME), TIME('10:57' ))【参考方案4】:datetime = CONCAT(date, ' ', time);
【讨论】:
请注意CONCAT()
返回一个字符串,没有 true DATETIME
值。
CONCAT 很差 - 如果时间 > 24 小时怎么办?
这是错误的,绝对不是这样做的方法,结果将是一个字符串,并且要求的返回类型明确是 DATETIME 而不是 varchar。正如@SystemParadox 所提到的,这样做的方法是使用正确的数据类型并将它们添加在一起。【参考方案5】:
不用创建和解析字符串,只需给日期加一个间隔即可:
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】: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');
【讨论】:
以上是关于从 DATE 和 TIME 创建 DATETIME的主要内容,如果未能解决你的问题,请参考以下文章
date,datetime,time timestamp 用法怎样区分