为什么我的Update查询对我的表内容没有影响?

时间:2013-11-24 06:49:31

标签: mysql sql

我有一张表格,描述了未来的航班到达时间。在每个航班到达时间过去(或过期)后,我希望查询通过插入下一个到达时间来更新到达时间,该时间通常是当前日期/时间的一周。

虽然我的查询不会产生任何错误消息,但它对过期的到达时间没有影响。

在下面查询查询:

//更新应在航班到达后的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,请帮我理解为什么没有这个更新?

1 个答案:

答案 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 演示