最初,在我看来,这失败的原因是因为你不能减去日期之前的时间间隔。
SELECT INTERVAL 90 SECOND - NOW(); //..right syntax to use near '- NOW()'
手册指出:
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
。