如何用单条SQL语句更新Foo表中符合指定日期时间条件的记录?
单条SQL语句实现目标更新操作
当然可以用单条UPDATE语句完成这个需求!你只需要把两个判断条件通过OR运算符合并到同一个WHERE子句中,就能一次性更新符合要求的所有记录。
原表结构
CREATE TABLE Foo ( UserAction VARCHAR(20), JoiningDate DATETIME, JoiningTime TIME );
原始记录
| UserAction | JoiningDate | JoiningTime |
|---|---|---|
| Pending | 2018-01-14 00:00:00 | 20:00:00 |
| Pending | 2018-01-15 00:00:00 | 16:00:00 |
| Pending | 2018-01-16 00:00:00 | 16:00:00 |
| Pending | 2018-01-16 00:00:00 | 20:00:00 |
| Pending | 2018-01-17 00:00:00 | 16:00:00 |
单条UPDATE语句
UPDATE Foo SET UserAction = 'DONE' WHERE JoiningDate > '2018-01-16 00:00:00' OR (JoiningDate = '2018-01-16 00:00:00' AND JoiningTime >= '18:00:00');
执行后的预期结果
| UserAction | JoiningDate | JoiningTime |
|---|---|---|
| Pending | 2018-01-14 00:00:00 | 20:00:00 |
| Pending | 2018-01-15 00:00:00 | 16:00:00 |
| Pending | 2018-01-16 00:00:00 | 16:00:00 |
| DONE | 2018-01-16 00:00:00 | 20:00:00 |
| DONE | 2018-01-17 00:00:00 | 16:00:00 |
说明
这里用括号把JoiningDate = '2018-01-16'和JoiningTime >= '18:00:00'的条件包裹起来,确保逻辑判断的优先级正确——先判断日期是否为指定日期且时间符合要求,再和“日期大于指定日期”的条件做或判断,和你原来两条语句的逻辑完全一致,只是合并成了一次操作,效率更高。
内容的提问来源于stack exchange,提问作者Jarvis
相关产品推荐
相关产品推荐

