我有一张描述 future 航类到达时间的表格。在每个航类到达时间过去(或过期)后,我希望查询通过插入下一个到达时间来更新到达时间,通常是从当前日期/时间开始的一周。
虽然我的查询没有产生任何错误消息,但它对过期的到达时间没有影响。
在下面找到查询:
//更新应该发生在航类到达后 31 分钟到 1 小时之间。
UPDATE flightSched
SET `arrivalTime`= ADDDATE(NOW(), INTERVAL 1 WEEK)
WHERE arrivalTime BETWEEN SUBTIME(NOW(), '00:31:00')
AND SUBTIME(NOW(),'01:00:00')
ORDER BY arrivalTime ASC
在下面找到我的表格的简单版本:
+-------------+---------------------+
| FlightNo | arrivalTime |
+-------------+---------------------+
| ET821 | 2013-11-24 08:05:24 |
| MS838 | 2013-11-24 10:05:24 |
| H7361 | 2013-11-24 13:15:06 |
+-------------+---------------------+
如果当前时间是09:45,那么航类号ET821到达时间应该更新为2013-12-01 08:05:24,请帮我理解为什么没有更新?
最佳答案
您的更新不会产生任何结果,因为您在 WHERE
子句中的日期范围不正确。 BETWEEN
运算符中的上限值小于下限值。
根据你的要求代替
BETWEEN SUBTIME(NOW(), '00:31:00') AND SUBTIME(NOW(),'01:00:00')
^^^^^^^
至少应该是
BETWEEN SUBTIME(NOW(), '00:31:00') AND ADDTIME(NOW(),'01:00:00')
^^^^^^^
换个方式试试
UPDATE flightSched
SET arrivalTime = arrivalTime + INTERVAL 1 WEEK
WHERE arrivalTime >= NOW() - INTERVAL 31 MINUTE
AND arrivalTime <= NOW() + INTERVAL 1 HOUR
注意:确保您在 arrivalTime
列上有一个索引。
这是 SQLFiddle 演示
关于mysql - 为什么我的更新查询对我的表格内容没有影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171935/