Ich versuche, die letzten 5 Arbeitstage zu erarbeiten, wenn es ein Samstag oder Sonntag ist, dann muss Freitag als letzter Arbeitstag verwendet werden.SQL Arbeitstage Funktion
Ich habe den if else Teil dieser Abfrage funktioniert, aber wenn ich versuche, dies zu verwenden, um eine Funktion zu erstellen, die Fehlermeldungen erhalten, irgendwelche Ideen, was ich verpasst habe?
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
Möchten Sie uns sagen, was die Fehlermeldungen sind? – dfundako