Я пытаюсь выработать предыдущие 5 рабочих дней, если это суббота или воскресенье, тогда она должна использовать пятницу в качестве последнего рабочего дня.Функция рабочих дней SQL
Ive получил if, если часть этого запроса работает, но когда я пытаюсь использовать это для создания функции im, получающей сообщения об ошибках, любые идеи, которые пропустили ive?
create table holidays (
date date);
GO
create function dbo.WorkDays
(
@date datetime,
@days int
)
returns date
as
Begin
IF datename(dw,@date) = 'Saturday'
select dateadd(dd,-1,thedate)
from (
select thedate=dateadd(d,-v.day,cast(@date as date)),
rn=row_number() over (order by v.day),
weekday = datename(dw,dateadd(d,-v.day,cast(@date as date)))
from (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10))v(day)
left join holidays h on h.date = dateadd(d,v.day,cast(@date as date))
where left(datename(dw,dateadd(d,-v.day,cast(@date as date))),1) <> 'S'
) x
where @days = rn
Else If datename(dw,@date) = 'Sunday'
select dateadd(dd,-1,thedate)
from (
select thedate=dateadd(d,-v.day,cast(@date as date)),
rn=row_number() over (order by v.day),
weekday = datename(dw,dateadd(d,-v.day,cast(@date as date)))
from (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10))v(day)
left join holidays h on h.date = dateadd(d,v.day,cast(@date as date))
where left(datename(dw,dateadd(d,-v.day,cast(@date as date))),1) <> 'S'
) x
where @days = rn
Else
select thedate
from (
select thedate=dateadd(d,-v.day,cast(@date as date)),
rn=row_number() over (order by v.day),
weekday = datename(dw,dateadd(d,-v.day,cast(@date as date)))
from (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10))v(day)
left join holidays h on h.date = dateadd(d,v.day,cast(@date as date))
where left(datename(dw,dateadd(d,-v.day,cast(@date as date))),1) <> 'S'
) x
where @days = rn
End
drop table holidays
Не забудьте сообщить нам, что такое сообщения об ошибках? – dfundako