如何在SQL中对分存的年月列进行日期范围查询?
解决方案:获取2021年3月至今的MyData数据
方法一:通过日期转换实现筛选
你之前的错误是嵌套了多余的子查询,直接在WHERE子句中用DATEFROMPARTS生成日期后做比较即可:
SELECT * FROM MyData WHERE DATEFROMPARTS([Year], [Month], 01) >= '2021-03-01'
这里用>=是为了包含2021年3月的数据,若需严格排除该月份,可改为>。
方法二:无需日期转换的高效筛选
不用转换为日期类型,直接通过年份和月份的数值组合做比较,性能更优(避免日期函数的计算开销,适合大数据量场景):
SELECT * FROM MyData WHERE ([Year] * 100 + [Month]) >= 202103
原理是把年份和月份拼接成整数(比如2021年3月对应202103),直接和目标值做数值对比,逻辑清晰且计算高效。
两种方法对比
- 日期转换方法可读性更强,符合直观的日期逻辑,适合小数据量或需要后续处理日期的场景。
- 数值组合方法性能更好,无日期函数转换开销,若表中对
Year和Month有复合索引,查询效率会显著提升。
内容的提问来源于stack exchange,提问作者duls
相关产品推荐
相关产品推荐

