You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何不硬编码查询数据表中每月的最后一个周六日期

SQL Server 筛选每月最后一个周六实现方案

场景1:数据表已仅存储周六日期(和示例结构一致)

这种情况逻辑最简单,直接按日期所属的年月分组,取每组最大的日期即可。

示例代码

假设你的表名为weekend_calendar,存储周六的日期列名为saturday_dt,字段类型为DATE:

SELECT 
    FORMAT(MAX(saturday_dt), 'dd-MM-yyyy') AS last_saturday_of_month
FROM weekend_calendar
GROUP BY 
    DATEPART(YEAR, saturday_dt),
    DATEPART(MONTH, saturday_dt)
ORDER BY last_saturday_of_month

运行后输出和期望结果完全一致:

28-08-2021
25-09-2021

场景2:数据表存储全量日期,需要先筛选周六再取值

如果你的表不是仅存周六记录,需要先过滤出周六再做分组计算。为了避免@@DATEFIRST配置差异导致的周计算错误,推荐用固定基准日的方式判断周六:

示例代码

SELECT 
    FORMAT(MAX(date_col), 'dd-MM-yyyy') AS last_saturday_of_month
FROM your_table
-- 1900-01-06是固定的周六,以此为基准判断不受DATEFIRST配置影响
WHERE DATEDIFF(DAY, '1900-01-06', date_col) % 7 = 0
GROUP BY 
    DATEPART(YEAR, date_col),
    DATEPART(MONTH, date_col)
ORDER BY last_saturday_of_month

补充说明

  • 如果不需要格式化输出、要保留原始日期类型,去掉FORMAT函数直接取MAX(日期列)即可
  • 若使用SQL Server 2012之前的版本,不支持FORMAT函数,可以将格式化部分替换为CONVERT(VARCHAR, MAX(日期列), 105),105为SQL Server中对应dd-MM-yyyy格式的转换编号
  • 如果需要同时输出对应的年月维度,可以在SELECT中增加DATEPART(YEAR, 日期列) AS 年份、DATEPART(MONTH, 日期列) AS 月份字段

内容的提问来源于stack exchange,提问作者user14697114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:54:03