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

MS SQL Server 2017如何计算Date列对应日期的前一个周日

报错原因

你提交的SQL语句存在两处错误:

  • 类型运算错误:将DATEPART(weekday, GETDATE())返回的整数,与CAST(Processed_Date As date)返回的日期类型直接做加减运算,两种数据类型不兼容,直接触发类型冲突报错
  • 逻辑错误:你需要计算Processed_Date对应的前一个周日,但原写法DATEADD的基准日期用了GETDATE(),最终计算结果只和当前日期有关,和Processed_Date完全无关
正确实现代码

通用写法(不受服务器周起始日设置影响)

该写法适配任意@@DATEFIRST配置,返回Processed_Date对应日期所在周的周日(若当日为周日则返回当日):

DATEADD(day, 
    -(DATEPART(weekday, DATEADD(day, @@DATEFIRST - 1, CAST(Processed_Date AS DATE))) % 7),
    CAST(Processed_Date AS DATE)
) AS [Last Sunday]

如果需要当日为周日时返回上一周的周日,调整偏移逻辑即可:

DATEADD(day, 
    -CASE WHEN DATEPART(weekday, DATEADD(day, @@DATEFIRST - 1, CAST(Processed_Date AS DATE))) % 7 = 0 THEN 7 
        ELSE DATEPART(weekday, DATEADD(day, @@DATEFIRST - 1, CAST(Processed_Date AS DATE))) % 7 END,
    CAST(Processed_Date AS DATE)
) AS [Last Sunday]

简化写法(仅适配默认周起始日配置)

如果你的SQL Server实例保持默认配置@@DATEFIRST = 7(即周日为一周的第一天),可以用更精简的写法:

DATEADD(day, -(DATEPART(weekday, CAST(Processed_Date AS DATE)) - 1), CAST(Processed_Date AS DATE)) AS [Last Sunday]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03