You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL筛选掉每年12月24日至31日的日期

更简洁的SQL筛选方案

你的原始写法虽然可行,但可以通过直接操作日期字段的方式实现更简洁、高效的逻辑,以下是几种推荐的写法:

方法一:直接判断月份和日期范围

避免字符串拼接,直接用数值判断月份和日期区间,逻辑清晰且性能更优:

SELECT DATE_column
FROM TABLE_A
WHERE NOT (DATEPART(mm, DATE_column) = 12 AND DATEPART(dd, DATE_column) BETWEEN 24 AND 31)

这种写法不需要做字符串转换,数据库能更好地利用DATE_column上的索引(如果存在的话),执行效率比拼接字符串更高。

方法二:基于日期本身的范围比较

这是最推荐的写法,直接通过日期类型的比较筛选,完全符合日期处理的最佳实践:

适用于SQL Server

SELECT DATE_column
FROM TABLE_A
WHERE DATE_column < DATEFROMPARTS(YEAR(DATE_column), 12, 24)

适用于PostgreSQL

SELECT DATE_column
FROM TABLE_A
WHERE DATE_column < MAKE_DATE(EXTRACT(YEAR FROM DATE_column)::INT, 12, 24)

适用于MySQL

SELECT DATE_column
FROM TABLE_A
WHERE DATE_column < STR_TO_DATE(CONCAT(YEAR(DATE_column), '-12-24'), '%Y-%m-%d')

这个逻辑很直观:只保留当年12月24日之前的所有日期,完全不需要枚举具体日期,代码最简洁,而且日期范围查询的索引利用率是最高的。

内容的提问来源于stack exchange,提问作者PeterXO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:55:25