Мне нужно написать простой запрос, который возвращает три рабочих дня до заданной даты. Я не хочу создавать таблицу календаря. Есть ли алгоритм, который использует dateadd() и datepart(), которые я могу использовать для получения этого результата?Использование алгоритма SQL DateAdd, за исключением выходных дней
0
A
ответ
0
Я в конечном итоге, используя время цикла для подсчета количества дней недели.
я держать на велосипеде назад один день в то время, пока я не получить нужное количество дней недели, используя этот будний логику:
set @isweekday=case when (DATEPART(dw, @tempdate) + @@DATEFIRST) % 7 NOT IN (0, 1) then 1 else 0 end
0
Это то, что я использовал до того, как шаблон, который я нашел очень полезным:
DECLARE @DateOld datetime, @DateNew datetimeSET @DateOld = '10-Sep-2005'SET @DateNew = GETDATE()
SET DATEFIRST 1
SELECT DATEDIFF (day, @DateOld, @DateNew) - (2 * DATEDIFF(week, @DateOld, @DateNew)) - CASE WHEN DATEPART(weekday, @DateOld + @@DATEFIRST) = 1 THEN 1 ELSE 0 END - CASE WHEN DATEPART(weekday, @DateNew + @@DATEFIRST) = 1 THEN 1 ELSE 0 END
Источник: http://sqlcode.blogspot.com/2007/07/calculate-number-of-business-days.html