Это может быть чрезмерно сложно, но это было весело.
- Это первая часть, чтобы получить самую последнюю произошедшую в понедельник.
- Он начинается с создания таблицы, которая будет содержать все даты до самого последнего понедельника, а затем устанавливает min этой таблицы переменной @mondaythisweek.
declare @dateholder table (
thedate date,
theday varchar(10)
)
declare @now datetime
set @now = GETDATE()
;with mycte as (
select
cast(@now as date) as "thedate",
DATENAME(dw,@now) as "theday"
union all
select
cast(DATEADD(d,-1,"thedate") as date) as "thedate",
DATENAME(DW,DATEADD(d,-1,"thedate")) as "theday"
from
mycte
where
"theday" <> 'Monday'
)
insert into @dateholder
select * from mycte
option (maxrecursion 10)
declare @mondaythisweek date
set @mondaythisweek = (
select min(thedate)
from @dateholder
)
--This часть создает таблицу из @mondaythisweek к следующему воскресенью
;with mon_to_sun as (
select
@mondaythisweek as "dates",
DATENAME(dw,@mondaythisweek) as "theday"
union all
select
cast(DATEADD(d,1,"dates") as date) as "dates",
DATENAME(dw,cast(DATEADD(d,1,"dates") as date)) as "theday"
from mon_to_sun
where "theday" <> 'Sunday'
)
select *
from mon_to_sun
option(maxrecursion 10)
Вы должны взглянуть на этот ответ [Получить первый день недели в SQL Server] (HTTP://stackoverflow.com/a/7169656/1297603) – Yaroslav