MVP? MVP!

i love C#
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

根据日期算出加减指定工作日数后的日期

Posted on 2008-08-24 14:00  renhb  阅读(1074)  评论(1)    收藏  举报

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