SQL Server查询上上月29日至上月28日区间数据实现方案
SQL Server 按固定月度区间筛选数据的实现方法
需求说明
- 适配数据库:SQL Server 2012及以上版本(
DATEFROMPARTS函数从2012版本开始支持) - 筛选规则:自动获取上上月29日至上月28日的全量记录,无需手动修改时间参数
- 场景示例:若当前系统日期为2021年10月1日,筛选区间自动匹配为2021年8月29日 ~ 2021年9月28日
实现代码
直接在查询语句的WHERE子句中添加如下时间筛选条件即可:
WHERE Date BETWEEN DATEADD(month, -2, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 29)) AND DATEADD(month, -1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 28))
补充优化建议
如果你的Date字段是包含时分秒的datetime/datetime2类型,为了避免遗漏上月28日23:59:59.999这类末尾时间的记录,推荐改用半开区间写法,逻辑和原需求完全一致,兼容性更强:
WHERE Date >= DATEADD(month, -2, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 29)) AND Date < DATEADD(month, -1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 29))
内容的提问来源于stack exchange,提问作者Lowell Lowellcraft
相关产品推荐
相关产品推荐

