【问题标题】:Create Week Date Range column based on the service date根据服务日期创建周日期范围列
【发布时间】:2022-02-08 10:31:47
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server date concatenation


    【解决方案1】:

    您可以使用星期一作为参考日期来计算天数差异。执行整数除以 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

    【讨论】:

    • 谢谢。你的解决方案正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多