В настоящее время в моей базе данных SQL есть функция, которая добавляет определенное количество рабочих дней к дате, например, если вы введете дату, которая является четвергом, и добавите два дня, будет возвращена дата следующего понедельника. Я не беспокоюсь о каких-либо праздниках, исключены только выходные.
Проблема заключается в том, что в настоящее время это выполняется с использованием цикла while, и, похоже, оно значительно замедляет хранимую процедуру, которая использует ее при создании таблицы. Кто-нибудь знает, есть ли способ выполнить этот расчет без циклов while или курсоров?
Только для информации, это текущая функция:
ALTER FUNCTION [dbo].[AddWorkDaysToDate]
(
@fromDate datetime,
@daysToAdd int
)
RETURNS datetime
AS
BEGIN
DECLARE @toDate datetime
DECLARE @daysAdded integer
-- add the days, ignoring weekends (i.e. add working days)
set @daysAdded = 1
set @toDate = @fromDate
while @daysAdded <= @daysToAdd
begin
-- add a day to the to date
set @toDate = DateAdd(day, 1, @toDate)
-- only move on a day if we've hit a week day
if (DatePart(dw, @toDate) != 1) and (DatePart(dw, @toDate) != 7)
begin
set @daysAdded = @daysAdded + 1
end
end
RETURN @toDate
END