从DATE和TIME创建DATETIME

gre*_*gor 39 mysql datetime

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

joh*_*son 44

从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'
Run Code Online (Sandbox Code Playgroud)

  • @ChristopherBonitz你是正确的,mysql同时有TIMESTAMP和DATETIME,但是这个函数的名称是误导性的,它实际上确实返回了DATETIME,如果mysql只是将它命名为datetime()我认为人们会更加困惑. (3认同)
  • 这几乎是正确的,但在 mysql 中存在两种数据类型,即日期时间和时间戳。由于这实际上是返回一个时间戳,它没有回答这个问题,但它已经接近了。 (2认同)

CDu*_*Duv 37

要从两个独立的值和值中获得真正的 DATETIME价值:DATETIME

STR_TO_DATE(CONCAT(date, ' ', time), '%Y-%m-%d %H:%i:%s')
Run Code Online (Sandbox Code Playgroud)

  • 我猜它将是[`time_zone`系统变量]中设置的那个(http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone).`DATETIME`类型不存储时区. (4认同)

Zed*_*Zed 15

datetime = CONCAT(date, ' ', time);
Run Code Online (Sandbox Code Playgroud)

  • 请注意`CONCAT()`返回一个字符串,没有*true*`DATETIME`值. (10认同)
  • 这是错误的,绝对不是这样做的,结果将是一个字符串,并且要求的返回类型明确是DATETIME而不是varchar.正如@SystemParadox所提到的,这样做的方法是使用正确的数据类型并将它们一起添加. (3认同)

Sys*_*dox 13

你可以使用ADDTIME():

ADDTIME(CONVERT(date, DATETIME), time)
Run Code Online (Sandbox Code Playgroud)
  • date可以是日期字符串或DATE对象.
  • time可以是时间字符串或TIME对象.

在MySQL 5.5中测试过.