Oracle中UPDATE语句日期范围判断不符合预期问题咨询
问题分析与解决
问题根源:
BETWEEN运算符要求左右边界必须是左小右大(起始日期在前,结束日期在后)。你写的条件里,trunc(sysdate)(当前日期,比如10/14/2024)在前,trunc(sysdate - 15)(9/30/2024)在后,这时候BETWEEN的逻辑变成了“大于等于当前日期且小于等于15天前的日期”——这个范围本身是空的,因为当前日期肯定比15天前大,所以任何日期都会满足NOT BETWEEN,导致更新每次都执行。修正后的SQL:把两个边界值调换顺序,让更早的日期(15天前)在前,当前日期在后:
update tablex set field = 1 where tableid = 1 and to_date('10/14/2024', 'mm/dd/yyyy') not between trunc(sysdate - 15) and trunc(sysdate);
- 验证逻辑:当
10/14/2024处于9/30/2024到10/14/2024之间时,NOT BETWEEN返回false,更新操作就会被跳过,完全符合你原本的需求。
内容的提问来源于stack exchange,提问作者donovan rice
相关产品推荐
相关产品推荐

