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;
关键逻辑说明
- SET DATEFIRST 7:SQL Server中,
DATEFIRST参数控制一周的首日,7代表周日。这一步必须显式设置,避免不同环境默认值(如默认1代表周一)导致的计算偏差。 - StartDate(本周日)计算:
1 - DATEPART(WEEKDAY, MyDate)得到偏移量:- 当MyDate是周日时,
DATEPART(WEEKDAY)返回1,偏移量为0,StartDate即为当天(2024-02-04); - 当MyDate是周一至周六时,偏移量为负数,向前推至当周的周日。
- 当MyDate是周日时,
- EndDate(本周六)计算:
7 - DATEPART(WEEKDAY, MyDate)得到偏移量,向后推至当周的周六(如2024-02-04的EndDate为2024-02-10)。
内容的提问来源于stack exchange,提问作者Lina
相关产品推荐
相关产品推荐

