从 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】:

要从您的两个单独的 DATETIME 值中获取 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的主要内容,如果未能解决你的问题,请参考以下文章

python date,datetime 和time的区别

date,datetime,time timestamp 用法怎样区分

C#10,带来了Date和Time类型

将TIME添加到DATETIME值

如何在 MySQL 中将 DATE 和 TIME 与 DATETIME 分开

datetime & time