Я пишу функцию с 2 параметрами, datenow и '3' для добавления даты + 3 рабочих дня.
Я успешно добавил дату + 3 рабочих дня для выходных, но для праздников результат не тот, который я ожидал, для праздников у меня есть таблица с именем lkp_holiday, идея состоит в том, чтобы получить текущую дату и проверить датув lkp_holiday и если есть такая же дата, тогда добавьте для addDate
ALTER FUNCTION [dbo].[DATEADDEXCLUDEWD](@addDate AS DATE, @numDays AS INT)
RETURNS DATETIME
AS
BEGIN
DECLARE @DateHoliday DATETIME
WHILE @numDays > 0
BEGIN
SET @addDate = DATEADD(d, 1, @addDate)
--For weekend
IF DATENAME(DW, @addDate) = 'saturday' SET @addDate = DATEADD(d, 1, @addDate)
IF DATENAME(DW, @addDate) = 'sunday' SET @addDate = DATEADD(d, 1, @addDate)
--For Holiday
IF EXISTS(SELECT DISTINCT hol_date FROM [Vacation].[dbo].[Lkp_Holiday] WHERE hol_date > GETDATE())
BEGIN
DECLARE M_CURSOR CURSOR
FOR SELECT DISTINCT hol_date FROM [Vacation].[dbo].[Lkp_Holiday] WHERE hol_date > GETDATE()
OPEN M_CURSOR
FETCH NEXT FROM M_CURSOR INTO @DateHoliday
WHILE @@FETCH_STATUS = 0
BEGIN
SET @addDate = DATEADD(DAY, 1, @addDate)
FETCH NEXT FROM M_CURSOR INTO @DateHoliday
END
CLOSE M_CURSOR
DEALLOCATE M_CURSOR
END
SET @numDays = @numDays - 1
END
RETURN CAST(@addDate AS DATETIME)
END
Например, сегодня 2019-05-17, добавьте 3 дня, вывод 2019-05-22 = >> это правда, потому что этовключая выходные
Я запустил функцию, и внутри таблицы lkp_holiday у меня один выходной день, скажем, 2019-05-23
То, что я ожидаю, это 2019-05-24, но результатиз этой функции 2019-05-25