如何调整SQL过滤条件以获取包含完整年度的近5年数据
方案实现
你原有的语句是按当前日期倒推5年的精确时间点,调整后只需要把倒推出来的日期截断到当年1月1日零点即可,适配SQL Server(你当前使用的DATEADD、GETDATE均为SQL Server原生函数)的写法如下:
WHERE CreatedDate >= DATEFROMPARTS(YEAR(DATEADD(YEAR, -5, GETDATE())), 1, 1)
逻辑说明
- 先通过
DATEADD(YEAR, -5, GETDATE())得到5年前的当前日期 - 再用
YEAR()提取该日期对应的年份,配合DATEFROMPARTS()拼接成当年1月1日的日期 - 条件符从
>改为>=,避免漏掉1月1日零点产生的记录
低版本SQL Server兼容方案(2008及之前无DATEFROMPARTS的场景)
可以用字符串拼接转日期的写法实现相同效果:
WHERE CreatedDate >= CAST(CAST(YEAR(DATEADD(YEAR, -5, GETDATE())) AS VARCHAR(4)) + '-01-01' AS DATETIME)
其他常见数据库适配写法
- MySQL 版本:
WHERE CreatedDate >= DATE_SUB(CONCAT(YEAR(CURDATE()), '-01-01'), INTERVAL 5 YEAR)
- PostgreSQL 版本:
WHERE CreatedDate >= date_trunc('year', CURRENT_DATE - INTERVAL '5 years')
内容的提问来源于stack exchange,提问作者M.Ustun
相关产品推荐
相关产品推荐

