Это работает для меня. Может быть обобщено, чтобы не начинать работу в первый день месяца, и, вероятно, это более компактный способ сделать это, но это выполняет свою работу.
declare @month varchar(2) = '10',
@year varchar(4) = '2015',
@fullWeekCount int;
declare @firstOfTheMonth datetime = @year + '-' + @month + '-1';
declare @daysInMonth int = datediff(day, @firstOfTheMonth, dateadd(month, 1, @firstOfTheMonth))
select @fullWeekCount = (@daysInMonth/6)
declare @i int = 1,
@startDate datetime = @firstOfTheMonth,
@endDate datetime;
declare @dates table (StartDay datetime, EndDay datetime);
while (@i <= @fullWeekCount)
begin
if (@i = @fullWeekCount)
set @endDate = @year + '-' + @month + '-' + cast(@daysInMonth as varchar(2));
else
set @endDate = dateadd(day, 6, @startDate)
insert into @dates (StartDay, EndDay)
values (@startDate, @endDate)
set @startDate = dateadd(day, 1, @endDate)
set @i = @i + 1;
end
select * from @dates d
Какой бренд SQL? – James
Microsoft SQL @James – Bips4u
Непонятно, что вы спрашиваете. Вы находитесь в хранимой proc/trigger/etc, выполняющей некоторую логику, или пытаетесь вернуть определенный набор результатов с запросом? –