【问题标题】:SQL DATEADD Function Removing Week Ends [duplicate]SQL DATEADD函数删除周结束[重复]
【发布时间】:2020-12-29 10:24:22
【问题描述】:

我需要在“2020-12-01”日期上增加五天。但这里的情况是在“2020-12-01”日期加上五天的同时,我们不应该包括星期六 (2020-12-05) 和星期日 (2020-12-06)。

我已经尝试在 where 条件下使用带有过滤器选项的 DATEDIFF.. 但我无法获得解决方案。 任何人都可以帮我完成它。 (预计产出:2020-12-07)

【问题讨论】:

    标签: sql sql-server datetime sql-server-2016 recursive-query


    【解决方案1】:

    使用蛮力方法可能更简单,通过枚举子查询中的天数,仅在非周末天减少 coutner:

    declare @dt date = '20201202';
    declare @no_days int = 5;
    
    with cte as (
        select @dt as dt, @no_days as no_days
        union all
        select dateadd(day, 1, dt), 
            case when datename(weekday, dt) in ('Saturday', 'Sunday') 
                then no_days
                else no_days - 1
            end
        from cte
        where no_days > 1
    )
    select max(dt) as res from cte
    

    Demo on DB Fiddle(SQL Server 2016):

    |资源 | | :--------- | | 2020-12-11 |

    【讨论】:

    • 提示:( @@DateFirst + DatePart( weekday, SampleDate ) - 1 ) % 7 + 1 将始终返回一个从17 的整数,其中1 对应于星期日,无论DateFirstLanguage 的设置如何。
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 2014-11-20
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多