筛选两日期间记录时,使用OR替代AND的影响及SQL示例解析
用OR替代AND筛选日期范围的影响
这个问题其实是SQL逻辑运算符里最容易踩的坑之一,咱们来掰扯清楚两种写法的本质区别:
1. 使用AND的正确区间筛选
这条语句:
SELECT * FROM my_table WHERE date>=01012018 AND date<=31012018;
是精准筛选2018年1月1日到1月31日(包含首尾两天)的记录。AND的逻辑是「两个条件必须同时成立」,也就是说,一条记录的日期得既不早于1月1日,又不晚于1月31日,才会被捞出来——这正是我们想要的日期区间效果。
2. 使用OR的逻辑错误(完全偏离目标)
再看这条用OR的语句:
SELECT * FROM my_table WHERE date>=01012018 OR date<=31012018;
OR的逻辑是「只要满足其中一个条件就会被选中」,咱们拆解一下两个条件的覆盖范围:
date>=01012018:会选中所有2018年1月1日及之后的所有记录;date<=31012018:会选中所有2018年1月31日及之前的所有记录;
把这俩用OR拼起来,结果就是整个表的所有记录都会被返回——因为任何一个日期,要么落在1月31日之前,要么落在1月1日之后,根本不存在同时不满足这两个条件的日期。相当于你写了个无效的筛选条件,完全达不到「只取1月区间数据」的目的。
总结
一句话说清:AND是用来缩小筛选范围(必须同时符合所有约束),而OR是用来扩大筛选范围(符合任意一个约束就行)。要筛选两个日期之间的区间,必须用AND来绑定上下边界,用OR的话就直接跑偏了。
内容的提问来源于stack exchange,提问作者Ntiyiso Rikhotso
相关产品推荐
相关产品推荐

