mysql - 为什么我的更新查询对我的表格内容没有影响?

标签 mysql sql

我有一张描述 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/

相关文章:

mysql - 即使计数值为0 mysql也选择行

mysql - 带分组的 SQL 子查询

mysql - sql查询中使用Max(date)聚合函数时返回所有列中包含Null值的行

mysql - 查询一对多关系 where 条件

python - 使用 ORM 将 `select()` 与 `text()` 一起使用相当于什么?

php - 如何将 mysql 中的项目回显到 html 表中?

SQL:计算所有表中的列数,不包括 View

sql - 如何在SQL Server CE中插入超过4000个字符的nvarchar数据类型?

php - 我应该如何动态地将数据从一个表插入到另一个表中?

MySQL查询,从一个表中查找并插入到第二个表中