• Amit Lohia (2/4/2009)


    This can be done without a loop.

    Are you sure?

    Show us an example, or at least describe your approach conceptually.

    The topic of adding business days to a date was hashed through a while ago. And this can be done without a loop. See Jeff Modem's example below. But when you also need to deal with holidays defined in a table it gets a bit complicated. And I don't see this possible without a loop.

    CREATE FUNCTION addworkdays_jeff(@StartDate DATETIME, @DaysToAdd INT, @CountToday INT)

    RETURNS DATETIME

    AS

    BEGIN --------------------------------------------------------------------------------------

    RETURN (

    SELECT d.EndDate

    + CASE WHEN DATENAME(dw,d.EndDate) = 'Saturday' THEN 2

    WHEN DATENAME(dw,d.EndDate) = 'Sunday' THEN 1

    ELSE 0

    END AS EndDate

    FROM (SELECT DATEADD(wk,@DaysToAdd/5, @StartDate

    + CASE WHEN DATENAME(dw,@StartDate) = 'Saturday' THEN 2

    WHEN DATENAME(dw,@StartDate) = 'Sunday' THEN 1

    ELSE 0

    END

    + @DaysToAdd%5-@CountToday

    ) AS EndDate

    )d

    ) --End of Return

    END --End of Function

    go