T-SQL get number of working days between 2 dates

后端 未结 5 1953
青春惊慌失措
青春惊慌失措 2021-01-06 06:31

I want to calculate the number of working days between 2 given dates. For example if I want to calculate the working days between 2013-01-10 and 2013-01-15, the result must

5条回答
  •  感动是毒
    2021-01-06 07:17

    Here's a simple function that counts working days not including Saturday and Sunday (when counting holidays isn't necessary):

    CREATE FUNCTION dbo.udf_GetBusinessDays (
    
    @START_DATE DATE,
    @END_DATE DATE
    
    )
    RETURNS INT
    WITH EXECUTE AS CALLER
    AS
    
    BEGIN
    
     DECLARE @NUMBER_OF_DAYS INT = 0;
     DECLARE @DAY_COUNTER INT = 0;
     DECLARE @BUSINESS_DAYS INT = 0;
     DECLARE @CURRENT_DATE DATE;
     DECLARE @DAYNAME NVARCHAR(9)
    
     SET @NUMBER_OF_DAYS = DATEDIFF(DAY, @START_DATE, @END_DATE);
    
     WHILE @DAY_COUNTER <= @NUMBER_OF_DAYS
     BEGIN
    
        SET @CURRENT_DATE = DATEADD(DAY, @DAY_COUNTER, @START_DATE)
        SET @DAYNAME = DATENAME(WEEKDAY, @CURRENT_DATE)
        SET @DAY_COUNTER += 1
    
        IF @DAYNAME = N'Saturday' OR @DAYNAME = N'Sunday'
        BEGIN
            CONTINUE
        END
        ELSE
        BEGIN
            SET @BUSINESS_DAYS += 1
        END
     END
    
     RETURN @BUSINESS_DAYS
    END
    GO
    

提交回复
热议问题