動態計算工作日

由table來設置是否為工作日,(如果為節假日則設置為非工作日,即talbe會設置每天是否為工作日)
帶入的日期必須為工作日。

ALTER   function   [ dbo ] . [ fn_workdayadd ] ( @date   datetime @days   int )
    
returns   datetime   -- nvarchar(100)
as
begin

declare   @i   int -- 計算工作天
set   @i = 1

declare   @flag   nvarchar ( 10 ) -- 是否為工作天

WHILE  ( @i <= @days )
BEGIN
    
if   exists  ( SELECT   top   1  flag  FROM  dbo.BCC_Admin_WorkDay 
            
where  flag = ' Y '   and   convert ( nvarchar ( 10 ),Date, 120 ) = convert ( nvarchar ( 10 ), @date + 1 , 120 )) -- 工作天
         begin
                
set   @i = @i + 1
                
set   @date = @date + 1
                
set   @flag = ' Y '
        
end
        
else
        
begin
                
set   @date = @date + 1
                
set   @flag = ' N '
        
end
CONTINUE
END

-- 最后一天是工作天,看其后是否有不為工作天的
while   exists ( SELECT   top   1  flag  FROM  dbo.BCC_Admin_WorkDay  where   convert ( nvarchar ( 10 ),Date, 120 ) = convert ( nvarchar ( 10 ), @date + 1 , 120 and  flag = ' N ' )
begin
set   @date = @date + 1
end

return   convert ( nvarchar ( 10 ), @date , 120 ) -- +'  '+@flag
end

你可能感兴趣的:(工作)