0

嗨,我正在尝试编写一个 TSQL 函数,该函数将返回 2 个日期减去周末和英国公共假期之间的工作日数,这是我到目前为止所拥有的(由于缺乏经验,可能存在语法错误等,感谢任何更正):

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

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

餐桌布置场景

我对 TSQL 相当陌生,我正在努力寻找一种方法来查看银行列表并将它们从函数的返回 INT 中删除,因此返回传递给函数的两个日期之间的正确工作日数。

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

4

1 回答 1

2

我一直在使用日历表来处理这样的事情——每个日期一个条目,以及各种上下文的元数据,如工作日、周末和节假日。它对于很多任务非常方便。WHILE(你可以用一个简单的循环来设置它。)

计数可能如下所示:(
calendarWeekdayDATEPART(Weekday...生成时填充,结果因地区而异)。

SELECT COUNT(calendarDate)
FROM tblCalendar
WHERE 
    calendarDate BETWEEN @StartDate AND @Enddate
    AND calendarWeekday NOT IN (1, 7) AND calendarIsBankHoliday = 0
于 2013-07-31T13:42:56.607 回答