首页 > 解决方案 > SQL DATEADD 函数删除周结束

问题描述

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

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

标签: sqlsql-serverdatetimesql-server-2016recursive-query

解决方案


使用蛮力方法可能更简单,通过枚举子查询中的天数,仅在非周末天减少 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

DB Fiddle 上的演示(SQL Server 2016):

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

推荐阅读