SQL Server存储过程上月日期范围遗漏最后一天的问题求助
修正SQL存储过程中上月日期范围遗漏最后一天的问题
你当前存储过程里上月结束日期的计算逻辑存在两个问题:一是计算基准和@today变量不一致,二是原有公式易产生误差,导致遗漏上月最后一天。
修正后的代码
DECLARE @today DATE = CONVERT(DATE, GETDATE() + 1); -- 上月第一天(原有逻辑正确,可保留) DECLARE @previous_month_from DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, @today) - 1, 0); -- 修正后的上月最后一天 DECLARE @previous_month_to DATE = DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, @today), 0));
逻辑说明
- 先通过
DATEADD(MONTH, DATEDIFF(MONTH, 0, @today), 0)获取@today所在月份的第一天 - 对这个日期减1天,就能精准得到上月的最后一天,适配所有月份的天数(包括28/29/30/31天的情况)
比如当@today为11月1日时,本月第一天是11月1日,减1天就是10月31日,完美覆盖十月的全部日期;若@today是3月1日,减1天后会自动匹配2月的最后一天(闰年29日,平年28日)。
内容的提问来源于stack exchange,提问作者Blowers
相关产品推荐
相关产品推荐

