我有一张表格,描述了未来的航班到达时间。在每个航班到达时间过去(或过期)后,我希望查询通过插入下一个到达时间来更新到达时间,该时间通常是当前日期/时间的一周。
虽然我的查询不会产生任何错误消息,但它对过期的到达时间没有影响。
在下面查询查询:
//更新应在航班到达后的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
在下面找到我桌子的simlpe版本:
+-------------+---------------------+
| 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,请帮我理解为什么没有这个更新?
答案 0 :(得分:2)
您的更新不会产生任何结果,因为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 演示