gpt4 book ai didi

sql-server - SQL Server 函数将工作日添加到日期

转载 作者:行者123 更新时间:2023-12-03 02:46:42 31 4
gpt4 key购买 nike

我看过很多关于如何创建 SQL Server 函数的帖子,该函数将给定的工作日添加到某个日期。但是,他们都没有完全按照我需要的方式进行计算。我们有一个当前在代码中完成的函数,但我想将其转移到 native SQL Server 函数(供存储过程和查询中使用)。在开始评估仓储费之前,我们给客户 5 个工作日的时间来提货。 5 个工作日不包括周末和节假日(我们有一个包含节假日日期的表格)。这里的技巧是我需要在 5 个工作日之后立即获取日期,无论是周末还是假期。所以我需要该函数返回最后一个工作日,而不是之后的第一个工作日。因此,例如:

Oct 20th (Sat) plus 5 working days = Oct 26th (Fri)
Oct 21st (Sun) plus 5 working days = Oct 26th (Fri)
Oct 22nd (Mon) plus 5 working days = Oct 29th (Mon)
May 19th (Sat) plus 5 working days with May 21st a holiday = May 28th

5 个工作日是当前分配的时间,但将来可能会发生变化,因此需要将工作日数作为一个参数。此外,该函数可以在相当大的数据集上使用,所以我更喜欢在没有循环的情况下执行此操作。我们正在运行 SQL Server 2008。

编辑:这不是“Add business days to date in SQL without loops ”的重复,因为他们希望结束日期是工作日。我希望我的结束日期是最后一个宽限日之后的任何日期(即:周一到周五的 5 个工作日,我希望返回周六日期,而不是下一个周一)。

最佳答案

create table holidays (
date date);
GO

create function dbo.findWorkDayAfter(@date datetime, @days int)
returns date as
begin
return (
select thedate
from (
select thedate=dateadd(d,v.day,cast(@date as date)),
rn=row_number() over (order by v.day)
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 h.date is null and left(datename(dw,dateadd(d,v.day,cast(@date as date))),1) <> 'S'
) x
where @days = rn
)
end
GO

除非你有很长的假期,否则 10 天应该足以找到下一个工作日的第 5 个工作日。如果需要的话增加它。

如果您需要从某个日期算起的更多工作日,您可以使用此选项,它可以满足一年或三年的需要。

alter function dbo.findWorkDayAfter(@date datetime, @days int)
returns date as
begin
return (
select thedate
from (
select thedate=dateadd(d,v.number,cast(@date as date)),
rn=row_number() over (order by v.number)
from master..spt_values v
left join holidays h on h.date = dateadd(d,v.number,cast(@date as date))
where h.date is null and left(datename(dw,dateadd(d,v.number,cast(@date as date))),1) <> 'S'
and v.number >= 1 and v.type='p'
) x
where @days = rn
)
end
GO

关于sql-server - SQL Server 函数将工作日添加到日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862436/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com