add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
with dates as (
select convert(date, '2019-10-04') as originaldate
union all
select dateadd(day, 1, originaldate)
from dates
where originaldate < '2019-10-12'
)
select * into t from dates
9 rows affected
with cte as (
select min(originaldate) as dte, count(*) as cnt, min(originaldate) as originaldate
from t
union all
select (case when datename(weekday, v.nextdate) = 'Saturday' then dateadd(day, 2, nextdate)
when datename(weekday, v.nextdate) = 'Sunday' then dateadd(day, 1, nextdate)
else v.nextdate
end),
cnt - 1, dateadd(day, 1, originaldate)
from cte cross apply
(values (dateadd(day, 1, dte))) v(nextdate)
where cnt > 0
)
select originaldate, dte
from cte
order by originaldate

originaldate dte
2019-10-04 2019-10-04
2019-10-05 2019-10-07
2019-10-06 2019-10-08
2019-10-07 2019-10-09
2019-10-08 2019-10-10
2019-10-09 2019-10-11
2019-10-10 2019-10-14
2019-10-11 2019-10-15
2019-10-12 2019-10-16
2019-10-13 2019-10-17