有人可以解释一下MySQL的这种行为吗?
查询:
SELECT NOW() + INTERVAL 90 SECOND - NOW() AS test;
结果:
130 - 在now()处于(00:00 - 00:29)间隔的情况下
170 - 在now()处于(00:30 - 00:59)间隔的情况下
我将130结果解释为“1分30秒”。 170结果很奇怪,我怀疑它与微小的溢出有关,但我无法解释它。
以下查询工作正常(我的意思是 - 正如我所料):
select TIMEDIFF( DATE_ADD( now(), INTERVAL 90 SECOND), now()) AS test;
结果:00:01:30
答案 0 :(得分:2)
最初,在我看来这是失败的原因是因为你不能在日期之前的时间间隔减去。
SELECT INTERVAL 90 SECOND - NOW(); //..right syntax to use near '- NOW()'
manual州:
如果另一侧的表达式是日期或日期时间值,则+运算符的任何一侧都允许
INTERVAL expr unit
。对于 - 运算符,INTERVAL expr unit
仅允许在右侧,因为从一个区间中减去日期或日期时间值是没有意义的。
SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME) - CAST(NOW() AS DATETIME)
我也很可能将130
解释为1分30秒,但似乎正在发生的是通过减去时间部分(作为整数,而不是时间)来执行直接算术。
对于130:
SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME)
//June, 05 2013 13:10:50+0000
SELECT CAST(NOW() AS DATETIME)
//June, 05 2013 13:09:20+0000
SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME) - CAST(NOW() AS DATETIME)
//130
1050
- 920
------
130
170:
SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME)
//June, 05 2013 13:12:11+0000
SELECT CAST(NOW() AS DATETIME)
//June, 05 2013 13:10:41+0000
SELECT CAST(NOW() + INTERVAL 90 SECOND AS DATETIME) - CAST(NOW() AS DATETIME)
//170
1211
- 1041
-------
170
但是,您应该使用INTERVAL
使用日期函数(DATE_ADD
,DATE_SUB
),因为他们打算看到上面的内容返回130/170
时应返回90
。