如何在SQL中每年固定排除指定日期范围(如12.15-12.26圣诞档)
SQL排除每年圣诞档期数据的修正方案
错误原因
你原查询无结果的核心是过滤条件逻辑冲突:第二个条件用AND连接了两个互斥的判断,要求12月的日期同时满足≤15日和≥26日,不存在符合该要求的日期,因此没有数据返回。
正确写法
过滤逻辑调整为「排除每年12月15日到26日的所有记录」即可,SQL如下:
SELECT * FROM transactons WHERE event_date BETWEEN TO_DATE('2016-12-01', 'YYYY-MM-DD') AND TO_DATE('2021-12-31', 'YYYY-MM-DD') -- 排除每年12.15-12.26的记录 AND NOT ( EXTRACT(MONTH FROM event_date) = 12 AND EXTRACT(DAY FROM event_date) BETWEEN 15 AND 26 )
补充说明
- 建议给
TO_DATE函数显式指定日期格式参数,避免数据库默认日期格式和输入格式不匹配导致报错 - 如果使用MySQL等支持
MONTH()、DAY()内置函数的数据库,可以替换EXTRACT部分为MONTH(event_date) = 12、DAY(event_date) BETWEEN 15 AND 26,逻辑保持一致即可
内容的提问来源于stack exchange,提问作者Sam Comber
相关产品推荐
相关产品推荐

