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

在T-SQL中不使用DATEFIRST实现周一至周日年度周数计算

解决方案:基于周一至周日周期的年度周数计算(T-SQL)

核心实现代码

直接用以下表达式即可生成和SET DATEFIRST 1完全一致的年度周数,无需修改数据库设置或创建任何对象:

SELECT 
    BusinessDate,
    DATEPART(wk, 
        DATEADD(day, 
            1 - ((@@DATEFIRST + DATEPART(weekday, BusinessDate) - 1) % 7 + 1), 
            BusinessDate
        )
    ) AS YearWeek
FROM dbo.BusinessInformation

逻辑说明

  1. 周起始日校准:

    • 你已实现的((@@DATEFIRST + DATEPART(weekday, BusinessDate) - 1) % 7 + 1)会返回1(周一)到7(周日)的星期值。
    • 通过1 - 该值计算出当前日期到本周一的偏移天数:周一偏移0天,周日偏移-6天。
    • 用DATEADD将原日期调整到本周一,以此作为周计算的基准日。
  2. 周数计算:

    • 对校准后的周一日期使用DATEPART(wk, ...),就能自动处理年末年初的跨周问题(比如12月31日若属于下一年第一周,会正确返回1而非错误周数),结果和SET DATEFIRST 1完全一致。

验证案例

  • 2023年12月31日(周日):校准后为2023年12月25日(周一),周数返回52
  • 2024年1月1日(周一):校准后为自身,周数返回1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:00:55