Add business days to date in SQL without loops

后端 未结 25 2929
无人共我
无人共我 2020-12-02 22:54

I currently have a function in my SQL database that adds a certain amount of business days to a date, e.g. if you enter a date that is a Thursday and add two days, it will r

25条回答
  •  星月不相逢
    2020-12-02 23:35

    CREATE FUNCTION DateAddBusinessDays
    (
        @Days int,
        @Date datetime  
    )
    RETURNS datetime
    AS
    BEGIN
        DECLARE @DayOfWeek int;
    
        SET @DayOfWeek = CASE 
                            WHEN @Days < 0 THEN (@@DateFirst + DATEPART(weekday, @Date) - 20) % 7
                            ELSE (@@DateFirst + DATEPART(weekday, @Date) - 2) % 7
                         END;
    
        IF @DayOfWeek = 6 SET @Days = @Days - 1
        ELSE IF @DayOfWeek = -6 SET @Days = @Days + 1;
    
        RETURN @Date + @Days + (@Days + @DayOfWeek) / 5 * 2;
    END;
    

    This function can add and subtract business days regardless of the value of @@DATEFIRST. To subtract business days use a negative number of days.

提交回复
热议问题