【问题标题】:Creating DATETIME from DATE and TIME从 DATE 和 TIME 创建 DATETIME
【发布时间】:2010-11-22 01:30:21
【问题描述】:

在 MySQL 中有没有办法从给定的 DATE 类型的属性和给定的 TIME 类型的属性创建 DATETIME?

【问题讨论】:

  • 但你为什么要这么做?

标签: mysql 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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      相关资源
      最近更新 更多