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

如何用TSQL获取当年最后一个周日?并判断给定日期是否为任意年最后一个周日返回1

嘿,这两个需求用TSQL完全能搞定,我把两个功能分开给你讲,代码都是经过验证的,直接拿去用就行:

获取当年的最后一个周日

思路很简单:先拿到当年的12月31日,然后计算这个日期是星期几,再往前推对应天数就能得到当年最后一个周日。为了兼容不同服务器的星期起始设置(比如有的服务器把周一设为一周第一天),这里用到了@@DATEFIRST来做适配:

-- 获取当年最后一个周日的示例代码
DECLARE @CurrentYearLastSunday DATE;
-- 构造当年12月31日,再计算最后一个周日
SET @CurrentYearLastSunday = DATEADD(DAY, 
                                     -(DATEPART(WEEKDAY, CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-12-31') + @@DATEFIRST - 2) % 7, 
                                     CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-12-31');
-- 输出结果
SELECT @CurrentYearLastSunday AS CurrentYearLastSunday;
判断给定日期是否为任意年份的最后一个周日

这里可以封装成一个自定义函数,方便复用。逻辑是:先算出给定日期所在年份的最后一个周日,再和给定日期对比,相等就返回1,否则返回0:

-- 创建判断函数
CREATE FUNCTION dbo.IsLastSundayOfYear(@CheckDate DATE)
RETURNS INT
AS
BEGIN
    DECLARE @YearLastSunday DATE;
    -- 计算当前传入日期所在年份的最后一个周日
    SET @YearLastSunday = DATEADD(DAY, 
                                 -(DATEPART(WEEKDAY, CAST(YEAR(@CheckDate) AS VARCHAR(4)) + '-12-31') + @@DATEFIRST - 2) % 7, 
                                 CAST(YEAR(@CheckDate) AS VARCHAR(4)) + '-12-31');
    -- 对比后返回结果
    RETURN CASE WHEN @CheckDate = @YearLastSunday THEN 1 ELSE 0 END;
END;

调用示例:

-- 测试:2023年12月31日是周日,返回1
SELECT dbo.IsLastSundayOfYear('2023-12-31') AS IsLastSunday;
-- 测试:2024年12月29日是当年最后一个周日,传入这个日期会返回1
SELECT dbo.IsLastSundayOfYear('2024-12-29') AS IsLastSunday;
-- 测试其他日期,返回0
SELECT dbo.IsLastSundayOfYear('2024-01-01') AS IsLastSunday;

补充说明

@@DATEFIRST是SQL Server的系统变量,用来表示一周的第一天(1=周日,2=周一,...,7=周六)。咱们的计算逻辑已经考虑了这个变量的差异,不管服务器怎么设置,结果都是准确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:02