表值函数获取工作日周末和节假日除外

问题描述

实际上,经过多次测试后,该功能无法正常工作

例如,我尝试过Select * from [dbo].[fn_GetLeaveDays] ('2020-09-24',1,'2020-09-25',1) 并且应该只返回1,因为星期五是周末,但它返回2

请您协助寻找功能中的问题

ALTER FUNCTION [dbo].[fn_GetLeaveDays] (@DateFrom datetime2,@CalendarFunction int,@Dateto AS datetime2,@AdjustMode bit,@AdjustWeekEnds bit,@AdjustHolidays bit)
RETURNS @tbl table (totaldays int)
AS
BEGIN

IF @DateFrom > @Dateto
BEGIN
    DECLARE @T datetime2 = @Dateto,@F datetime2 = @DateFrom;
    SELECT @DateFrom = @T,@Dateto = @F;
END;

DECLARE @Count AS int = 0,@Date AS datetime2 = @DateFrom;

WHILE @Date < @Dateto
BEGIN
    IF ((DATEPART(WEEKDAY,@Date) IN (6)
     AND @AdjustWeekEnds = 1)
     OR EXISTS (SELECT *
                FROM [C3DCalendar].[dbo].[PRIMAVERA_CALENDAR_HOLIDAYS]
                WHERE holiday_date = @Date
                  AND calendar_key = @CalendarFunction
                  AND @AdjustHolidays = 1))
    BEGIN
        SELECT @Count = @Count + 1;
    END;

    SELECT @Date = DATEADD(DAY,@Date);
END;
INSERT INTO @tbl
SELECT (DATEDIFF(DAY,@DateFrom,@Dateto) - (@Count)) + @AdjustMode;
RETURN;
END;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)