如何在SQL的WHERE子句中用IF/CASE语句实现分阶段门店筛选
SQL WHERE子句实现分阶段门店过滤方案
不用嵌套IF/CASE,直接用逻辑运算符组合条件是更简洁高效的方式,以下是两种实现方式:
方式一:直接逻辑组合(推荐)
这种写法直观易懂,SQL优化器也更容易处理:
WHERE 1=1 AND ( -- 第一阶段:2022年8月,仅门店1 (DATE BETWEEN 20220801 AND 20220831 AND STORE = 1) -- 第二阶段:2022年9月,门店1、2、3 OR (DATE BETWEEN 20220901 AND 20220930 AND STORE IN (1, 2, 3)) -- 第三阶段:2022年10月及以后,所有门店 OR (DATE >= 20221001) )
方式二:使用CASE语句(可选)
如果一定要用CASE,也可以这样写,但可读性和性能不如上面的方式:
WHERE 1=1 AND ( CASE WHEN DATE BETWEEN 20220801 AND 20220831 THEN STORE = 1 WHEN DATE BETWEEN 20220901 AND 20220930 THEN STORE IN (1, 2, 3) WHEN DATE >= 20221001 THEN TRUE ELSE FALSE -- 可根据需求调整日期在20220801之前的过滤规则 END )
注意事项
如果DATE字段是标准日期类型(如DATE、DATETIME),建议使用日期字符串格式(比如'2022-08-01')替代数字,避免因类型转换导致的性能问题或错误。
内容的提问来源于stack exchange,提问作者keo
相关产品推荐
相关产品推荐

