您好我正在尝试编写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相当新,我正在努力寻找一种方法来查看bankhols列表并将其从函数的返回INT中删除,因此返回传递给函数的2个日期之间的正确工作天数。
任何帮助和建议将不胜感激(特别是如果它以易于理解的形式书写;))
答案 0 :(得分:2)
我一直在使用Calendar表来处理这样的事情 - 每个日期的一个条目,以及各种上下文的工作日,周末和假日等元数据。它对很多任务都非常方便。 (您可以使用简单的WHILE
循环进行设置。)
计票可能如下:
(calendarWeekday
生成后会DATEPART(Weekday...
填充,结果因地区而异。
SELECT COUNT(calendarDate)
FROM tblCalendar
WHERE
calendarDate BETWEEN @StartDate AND @Enddate
AND calendarWeekday NOT IN (1, 7) AND calendarIsBankHoliday = 0