如何设置DimDate表周起始日为周一并修正周起始日期计算
修正周起始日为周一的DimDate查询语句
问题描述
现有存储日期数据的DimDate表,需将周起始日设为周一(周范围为周一至周日)。当前查询语句在处理周日(如2024-03-31)时,错误将其周起始日判定为下周一(2024-04-01),不符合需求。
修正后的查询语句
SET DATEFIRST 1; SELECT DATE, DATEADD(DAY, 1 - DATEPART(WEEKDAY, DATE), DATE) AS WEEK_START, DATENAME(DW, DATE) AS DAY_OF_WEEK FROM DIMDATE
修正说明
原语句中DATEADD(WEEK,DATEDIFF(WEEK,0,DATE),0)的周数计算逻辑未完全适配SET DATEFIRST 1的设置,导致周日被划入下一周。修正后的写法通过DATEPART(WEEKDAY)获取当前日期的星期序号(SET DATEFIRST 1后,周一为1,周日为7),再通过日期偏移直接计算出对应周的周一,确保周日被归到上一周的周范围中,完全符合周一至周日的周定义。
验证结果
执行修正语句后,输出将符合预期:
| Date | Weekstart | Day Of Week |
|---|---|---|
| 2024-03-31 | 2024-03-25 | Sunday |
| 2024-04-01 | 2024-04-01 | Monday |
内容的提问来源于stack exchange,提问作者RRG
相关产品推荐
相关产品推荐

