Ужасный подход грубой силы - потому что 2,2,3 сложно зациклить, просто добавив его независимо от временной таблицы, а затем отфильтровав в конце, добавим пару дополнительных записей - не самый эффективный, но если вам нужно просто получить диапазон один, тогда это работает.
Итак, предостережение: хорошо, я бы не стал использовать в производстве :) 1003 *
declare @start datetime
declare @end datetime
declare @calculated datetime
set @start = '20010101'
set @end = '20011231'
set @calculated = @start
Create Table #Dates (PayDate datetime)
while @calculated <= @end
begin
set @calculated = DateAdd(wk,2,@calculated)
insert into #Dates(paydate) values (@calculated)
set @calculated = DateAdd(wk,2,@calculated)
insert into #Dates(paydate) values (@calculated)
set @calculated = DateAdd(wk,3,@calculated)
insert into #Dates(paydate) values (@calculated)
end
select * from #Dates where paydate >= @start and paydate <= @end
drop table #dates