動態計算工作日

由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,120and flag='N')
begin
set @date=@date+1
end

return convert(nvarchar(10),@date,120)--+'  '+@flag
end
posted @ 2008-05-15 11:55  Nina  阅读(440)  评论(0编辑  收藏  举报