ALTER function [dbo].[fn_WorkDayAdd](@begin datetime,@num int)
returns datetime
As
BEGIN
declare @i int,@s int,@w int,@maxday int,@overvalue datetime
set @i=0
set @s=0--非工作日
set @w=0--工作日
if @num=0
begin
if datepart(weekday,@begin) not in(1,7)
set @overvalue=@begin
else
set @overvalue=null--异常
end
else if @num>0
begin
set @maxday = (@num/7+7)*7--可能范围内的最大天数
while @i<@maxday
begin
if @w<=@num--有效工作日
begin
if datepart(weekday,dateadd(d,@i,@begin)) in(1,7)
set @s=@s+1
else
set @w=@w+1
end
set @i=@i+1
end
end
else if @num<0
begin
set @maxday = (@num/7-7)*7--可能范围内的最大天数
while @i>@maxday
begin
if @w>=@num--有效工作日
begin
if datepart(weekday,dateadd(d,@i,@begin)) in(1,7)
set @s=@s-1
else
set @w=@w-1
end
set @i=@i-1
end
end
set @overvalue=dateadd(d,@num+@s,@begin)
return @overvalue
END
浙公网安备 33010602011771号