Tsql 返回两个日期之间减去周末和银行假日的工作日数

Tsql 返回两个日期之间减去周末和银行假日的工作日数,tsql,Tsql,您好,我正在尝试编写一个TSQL函数,该函数将返回两个日期减去周末和英国公共假日之间的工作日数,以下是我迄今为止的情况(由于缺乏经验,可能会出现语法错误等,敬请更正): 现在我可以访问存储英国银行假日的表(或者如果需要,我可以复制它),这里是一个设置屏幕: 我是TSQL的新手,我正在努力寻找一种方法来查看bankhols列表,并从函数返回的INT中删除它们,从而返回传递给函数的两个日期之间的正确工作日数 任何帮助和建议都将不胜感激(特别是如果它是以一种易于理解的形式编写的;)我一直在使用日历表

您好,我正在尝试编写一个TSQL函数,该函数将返回两个日期减去周末和英国公共假日之间的工作日数,以下是我迄今为止的情况(由于缺乏经验,可能会出现语法错误等,敬请更正):

现在我可以访问存储英国银行假日的表(或者如果需要,我可以复制它),这里是一个设置屏幕:

我是TSQL的新手,我正在努力寻找一种方法来查看bankhols列表,并从函数返回的INT中删除它们,从而返回传递给函数的两个日期之间的正确工作日数


任何帮助和建议都将不胜感激(特别是如果它是以一种易于理解的形式编写的;)

我一直在使用日历表来处理类似的事情-每个日期一个条目,不同环境下的元数据如工作日、周末和假日。对于许多任务来说,它非常方便。(您可以通过一个简单的
WHILE
循环进行设置。)

计数可能如下所示:
calendarWeekday
将填充
DATEPART(工作日…
生成后,结果因地区而异)


“到目前为止,我尚未检查代码是否有错误”-所以现在还不要发布它!我已经编辑了我所说的评论,是为了像你一样的评论,米奇,但是嘿,我们都从某个地方开始…这很有用,但是我已经开始了一个新问题,因为我必须使用我已经拥有的资源,我已经取得了一些进展,我想下一个问题会更好地解决。
CREATE FUNCTION dbo.fn_WorkDays (@StartDate AS DATETIME, @EndDate AS DATETIME)

--Define the output data type.
RETURNS INT
AS
--Calculate the RETURN of the function.
BEGIN
     RETURN (SELECT
        (DATEDIFF(dd,@StartDate, @EndDate)+1)-(DATEDIFF(wk,@StartDate, @EndDate)*2)-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday'THEN 1 ELSE 0 END)-(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)
        )END
GO
SELECT COUNT(calendarDate)
FROM tblCalendar
WHERE 
    calendarDate BETWEEN @StartDate AND @Enddate
    AND calendarWeekday NOT IN (1, 7) AND calendarIsBankHoliday = 0