可能是Mysql 5.6.20的bug。日期 - 现在()?

时间:2015-06-02 13:52:27

标签: mysql

date_newOrd, now(), date_newOrd-now() AS `time`

这是我的查询。 date_newOrd是类型日期。我试着计算下次到达订单的剩余时间。我最好向您展示截图:

enter image description here

enter image description here

enter image description here

结果没有任何意义。我该怎么做>

2 个答案:

答案 0 :(得分:4)

你不能这样减去日期:

mysql> select '2015-06-01 18:20:03' - now();
+-------------------------------+
| '2015-06-01 18:20:03' - now() |
+-------------------------------+
|               -20150602073525 |
+-------------------------------+

虽然这可能看起来(模糊地)像日期,但它实际上是一个整数,并且不能用于进一步的日期数学而无需额外的处理。

您必须使用datediff()timediff()

mysql> select timediff('2015-06-01 18:20:03', now()) as td, datediff('2015-06-01 18:20:03', now()) as dd;
+-----------+------+
| td        | dd   |
+-----------+------+
| -13:37:47 |   -1 |
+-----------+------+

请注意,datediff仅处理日期,timediff处理日期时间值。

答案 1 :(得分:0)

当你进行减法时,MySQL将在数值上下文中评估NOW(),它返回一个数值。

SELECT NOW()+0 

20150602135210.000000

所以,你的陈述是在减去数字,而不是进行DATE计算。

一些可能性:

您可以将日期时间值转换为unix_timestamp值(UNIX_TIMESTMAP()函数),然后减去这些值以获得整数秒的差异。

DATEDIFF()函数可以在整数天内获得差异。 (仅在日期部分运行,它忽略了时间......因此可能无法为您提供所需的分辨率。)

TIMESTAMPDIFF()TIMEDIFF()功能也可用。 (TIMEDIFF函数返回TIME数据类型值;该数据类型的最大值为838:59:59,因此限制为不到35天。)

例如:

SELECT UNIX_TIMESTAMP('2015-06-03') - UNIX_TIMESTAMP(NOW()) AS secs

secs
------- 
  35856