如何在SQL Server中查询获取上一个月最后一个周六的日期
SQL Server 查询上月最后一个周六的实现方法
适用版本说明
- SQL Server 2012及以上版本可直接使用内置
EOMONTH函数实现 - 更低版本可使用兼容写法实现
核心逻辑
- 先计算出上一个月的最后一天
- 根据上月最后一天的星期偏移对应天数,得到当月最后一个周六:如果最后一天本身是周六则直接取值,否则向前追溯最近的周六
具体实现代码
SQL Server 2012+版本
-- 固定一周第一天为周日,避免服务器DATEFIRST配置差异导致结果异常 SET DATEFIRST 7; SELECT DATEADD( DAY, - (DATEPART(WEEKDAY, EOMONTH(DATEADD(MONTH, -1, GETDATE()))) % 7), EOMONTH(DATEADD(MONTH, -1, GETDATE())) ) AS 上月最后一个周六
逻辑验证
以示例场景为例:当前日期为2021年9月,上月最后一天为2021-08-31(周二),DATEPART(WEEKDAY)返回值为3,3对7取余得3,向前偏移3天即得到2021-08-28,和示例结果一致。
低版本兼容写法(SQL Server 2012之前)
如果数据库版本不支持EOMONTH函数,可使用如下写法计算上月最后一天:
SET DATEFIRST 7; SELECT DATEADD( DAY, - (DATEPART(WEEKDAY, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)) % 7), DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1) ) AS 上月最后一个周六
内容的提问来源于stack exchange,提问作者user14697114
相关产品推荐
相关产品推荐

