根据服务日期创建周日期范围列

Create Week Date Range column based on the service date

我需要根据 ServiceDate 列创建 WeekDateRange 列。 每个 WeekDateRange 值应以星期一日期开始,以与 ServiceDate 关联的星期日日期结束,格式为 (mm/dd/yyyy - mm/dd/yyyy)

SELECT s.ServiceDate
FROM ServiceInfo AS s
ServiceDate
2022-01-03
2022-01-07
2022-01-15
2022-01-26
2022-01-29
2022-02-01
2022-02-04
2022-02-06
2022-02-07

我尝试使用以下查询,但是 2022-02-06 ServiceDate 分配给 02/07/2022 - 02/13/2022 周

SELECT s.ServiceDate,
       CONCAT(CONVERT(VARCHAR, DATEADD(DAY, 2 - DATEPART(WEEKDAY, 
            s.ServiceDate), CAST(s.ServiceDate AS DATE)), 101), 
            ' - ', CONVERT(VARCHAR, DATEADD(DAY, 8 - DATEPART(WEEKDAY, 
            s.ServiceDate), CAST(s.ServiceDate AS DATE)), 101)) AS 
            WeekDateRange

FROM ServiceInfo AS s

输出:

ServiceDate WeekDateRange
2022-01-03 01/03/2022 - 01/09/2022
2022-01-07 01/03/2022 - 01/09/2022
2022-01-15 01/10/2022 - 01/16/2022
2022-01-26 01/24/2022 - 01/30/2022
2022-01-29 01/24/2022 - 01/30/2022
2022-02-01 01/31/2022 - 02/06/2022
2022-02-04 01/31/2022 - 02/06/2022
2022-02-06 02/07/2022 - 02/13/2022 (Needs to be 01/31/2022 - 02/06/2022)
2022-02-07 02/07/2022 - 02/13/2022

您可以使用星期一作为参考日期来计算天数差异。执行整数除以 7,然后乘以 7 将返回周一开始的天数

1st Jan, 1900 是星期一,开始日期:

   DATEADD(DAY, DATEDIFF(DAY, '19000101', s.ServiceDate) / 7 * 7, '19000101') 

对于结束日期,只需将天数差加上 1 周,然后从 31 Dec 1899

的参考日期减去 1 天
   DATEADD(DAY, (DATEDIFF(DAY, '19000101', s.ServiceDate) / 7 + 1) * 7, '18991231') 

dbfiddle