Этот запрос вернет все понедельники месяца, начиная с переменной @day.
declare @day date = '2020-05-01';
with cte as (
select @day as day
union all
select dateadd(day, 1, day)
from cte
where month(dateadd(day, 1, day)) = month(day)
)
select *
from cte
where datepart(weekday, day) = 2
Он рекурсивный, вы начинаете с переменной @day и добавляете один день подряд, пока вы остаетесь на в том же месяце. Как только этот CTE возвращает все дни месяца, вы фильтруете его, возвращая дни дня недели 2 (эта функция запускает неделю в воскресенье как день 1).