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

SQL中以周日为一周起始日生成周起止日期问题求助

解决SQL中以周日为一周首日的日期范围计算问题

你的核心问题是周起始/结束日期的偏移逻辑未适配“周日作为一周第一天”的规则,且未确保会话级的日期首选项生效。以下是修正方案:

修正后的脚本

-- 会话级设置:指定周日为一周第一天
SET DATEFIRST 7;

SELECT 
    MyDate,
    DATEPART(WEEKDAY, CAST([MyDate] AS date)) AS WEEKDAY, -- 修正原拼写错误WEEDAY
    DATEADD(DAY, 1 - DATEPART(WEEKDAY, CAST([MyDate] AS date)), CAST([MyDate] AS date)) AS StartDate,
    DATEADD(DAY, 7 - DATEPART(WEEKDAY, CAST([MyDate] AS date)), CAST([MyDate] AS date)) AS EndDate
FROM 
    MyTable
WHERE 
    MyDate BETWEEN '2024-02-04' AND '2024-02-10'
ORDER BY 
    MyDate;

关键逻辑说明

  1. SET DATEFIRST 7:SQL Server中,DATEFIRST参数控制一周的首日,7代表周日。这一步必须显式设置,避免不同环境默认值(如默认1代表周一)导致的计算偏差。
  2. StartDate(本周日)计算:1 - DATEPART(WEEKDAY, MyDate)得到偏移量:
    • 当MyDate是周日时,DATEPART(WEEKDAY)返回1,偏移量为0,StartDate即为当天(2024-02-04);
    • 当MyDate是周一至周六时,偏移量为负数,向前推至当周的周日。
  3. EndDate(本周六)计算:7 - DATEPART(WEEKDAY, MyDate)得到偏移量,向后推至当周的周六(如2024-02-04的EndDate为2024-02-10)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:45:05