gpt4 book ai didi

sql-server - 使 UDF 独立于 DATEFIRST 设置

转载 作者:行者123 更新时间:2023-12-02 07:47:22 24 4
gpt4 key购买 nike

在 SO 答案的帮助下,我创建了一个 SQL Server UDF(如下),它返回下一个工作日(工作日),给定日期和要添加的天数。

例如,如果日期是星期五,你想加上一天,返回值为下一个星期一。

这依赖于假设 @@DATEFIRST 设置为 1(星期一),因为我们无法在 UDF 中显式设置 DATEFIRST

我的问题是我想在多台服务器上部署此功能,但它们具有不同的 @@DATEFIRST 设置,并且为了在生产、测试​​和开发服务器之间进行维护,我宁愿只拥有一个功能,无需担心正在使用哪个 @@DATEFIRST 设置。我已经花了很长时间想知道为什么我在不同的环境中会得到不同的结果!

如果答案只是“使用存储过程”那么就足够了。但是,如果有人可以建议如何重构以下内容以使其独立于 DATEFIRST 设置,那就太好了。重要的行可能是 if DatePart(dw, @toDate) not in (6, 7)...

函数定义:

CREATE FUNCTION [dbo].[fn_AddBusinessDays]
(
@fromDate datetime,
@daysToAdd int
)
RETURNS datetime
AS
BEGIN
DECLARE @toDate datetime
DECLARE @daysAdded integer

-- add the days, ignoring weekends (i.e. add working days)
set @daysAdded = 1
set @toDate = @fromDate

while @daysAdded <= @daysToAdd
begin
-- add a day to the to date
set @toDate = DateAdd(day, 1, @toDate)
-- only move on a day if we've hit a week day
if DatePart(dw, @toDate) not in (6, 7)
begin
set @daysAdded = @daysAdded + 1
end
end

RETURN @toDate

END

最佳答案

IF (@@DATEFIRST + DATEPART(DW, @toDate)) % 7 not in (0,1) 我认为应该适用于所有可能的 DATEFIRST 值。

无论如何,我可能会为此使用辅助日历表而不是循环 UDF。

关于sql-server - 使 UDF 独立于 DATEFIRST 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980791/

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