一个sql函数:计算时间差(除周六和周日外)的天数

http://topic.csdn.net/u/20070322/12/2a8d5fcf-2d5b-49e1-b58a-c7277e15ee95.html
方法1
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[f_WorkDay] ')   and   xtype   in   (N 'FN ',   N 'IF ',   N 'TF ')) 
drop   function   [dbo].[f_WorkDay] 
GO 

--计算两个日期相差的工作天数 
CREATE   FUNCTION   f_WorkDay( 
@dt_begin   datetime,     --计算的开始日期 
@dt_end     datetime         --计算的结束日期 
)RETURNS   int 
AS 
BEGIN 
            DECLARE   @workday   int,@i   int,@bz   bit,@dt   datetime 
            IF   @dt_begin> @dt_end 
                        SELECT   @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt 
            ELSE 
                        SET   @bz=0 
            SELECT   @i=DATEDIFF(Day,@dt_begin,@dt_end)+1, 
                        @workday=@i/7*5, 
                        @dt_begin=DATEADD(Day,@i/7*7,@dt_begin) 
            WHILE   @dt_begin <=@dt_end 
            BEGIN 
                        SELECT   @workday=CASE   
                                    WHEN   (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7   BETWEEN   1   AND   5 
                                    THEN   @workday+1   ELSE   @workday   END, 
                                    @dt_begin=@dt_begin+1 
            END 
            RETURN(CASE   WHEN   @bz=1   THEN   -@workday   ELSE   @workday   END) 
END 
GO


方法2
create   function   fn_test(@begin   datetime,@end   datetime) 
returns   int 
As 
BEGIN 
declare   @i   int,@j   int 
set   @i=0 
set   @j=0 
if   @end> @begin 
  begin 
              while   dateadd(d,@i,@begin) <=@end 
                        begin 
                                    if   datepart(weekday,dateadd(d,@i,@begin))   not   in(1,7) 
                                              set   @j=@j+1 
                                    set   @i=@i+1 
                          end 
    end 
  
return   @j 

END
快乐渡过每一天,减肥坚持每一天