date_newOrd, now(), date_newOrd-now() AS `time`
这是我的查询。 date_newOrd
是类型日期。我试着计算下次到达订单的剩余时间。我最好向您展示截图:
结果没有任何意义。我该怎么做>
答案 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