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

如何在SQL Server中无需硬编码动态获取每月最后一个周六的日期

SQL Server 动态获取当月最后一个周六实现方案

核心实现代码

以下代码无需硬编码,兼容任意@@DATEFIRST系统配置,可直接获取指定日期所在月份的最后一个周六:

-- 可替换为任意目标日期,取该日期所属月份的最后一个周六
DECLARE @TargetDate DATE = GETDATE();
DECLARE @MonthEnd DATE = EOMONTH(@TargetDate);

SELECT DATEADD(
    DAY,
    - (DATEPART(WEEKDAY, @MonthEnd) + @@DATEFIRST - 1) % 7,
    @MonthEnd
) AS LastSaturdayOfMonth;

逻辑说明

  • 先通过EOMONTH()函数获取指定日期所在月份的最后一天,无需手动计算月份天数、拼接日期,完全无硬编码
  • 偏移量计算(DATEPART(WEEKDAY, @MonthEnd) + @@DATEFIRST - 1) % 7 会自动适配实例的星期起始日配置,无论系统默认一周第一天是周日还是周一,计算结果都准确
  • 如果当月最后一天本身就是周六,偏移量为0,直接返回当月最后一天,符合预期

效果验证

以提问中的2021年9月为例,运行如下代码:

DECLARE @TargetDate DATE = '2021-09-01';
DECLARE @MonthEnd DATE = EOMONTH(@TargetDate);

SELECT DATEADD(
    DAY,
    - (DATEPART(WEEKDAY, @MonthEnd) + @@DATEFIRST - 1) % 7,
    @MonthEnd
) AS LastSaturdayOfMonth;

返回结果为2021-09-25,和示例结果完全一致。

可选封装为复用函数

如果需要频繁调用该逻辑,可封装为自定义标量函数:

CREATE FUNCTION dbo.GetLastSaturdayOfMonth(@InputDate DATE)
RETURNS DATE
AS
BEGIN
    DECLARE @MonthEnd DATE = EOMONTH(@InputDate);
    RETURN DATEADD(
        DAY,
        - (DATEPART(WEEKDAY, @MonthEnd) + @@DATEFIRST - 1) % 7,
        @MonthEnd
    );
END
GO

-- 函数调用示例
SELECT dbo.GetLastSaturdayOfMonth('2021-09-15') AS LastSaturdayOfSep2021;

内容的提问来源于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 23:06:04