时间段天数用sql排除节假日

首先创建[holiday]表记录国家法定假日

CREATE TABLE [dbo].[holiday](
	[Id] [int] IDENTITY(1,1) identity(1,1) NOT NULL,
	[HoliDate] [datetime] NULL,
	[Description] [varchar](100)
)

 

然后写一个标量值函数

create function [dbo].[dateArithmetic](   
    @stratDate   datetime, --开始时间  
    @endDate   datetime --结束时间  
)  
returns int   
as
begin   
    DECLARE @jqday varchar(20)  
    DECLARE @days int  
    DECLARE @weekday varchar(20)  
      
    --获取总天数  
    set @days=DATEDIFF(day,@stratDate,@endDate)    
   
    select @jqday=count(*) from holiday where HoliDate >= @stratDate and HoliDate<=@endDate  
    while @stratDate<=@endDate  
    begin  
          
       
       if exists (select count(*) from holiday where HoliDate=@stratDate)
        begin
        select @weekday=datename(weekday,@stratDate)  
          
        if @weekday='星期六' or @weekday='星期日'  
            set @jqday=@jqday+1  
        set @stratDate=dateadd(day,1,@stratDate)  
        end
       else
       begin
        select @weekday=datename(weekday,@stratDate)  
          
        if @weekday='星期六' or @weekday='星期日'  
            set @jqday=@jqday-1  
        set @stratDate=dateadd(day,1,@stratDate)  
       end
    end  
      
    set @days=@days-@jqday  
    --print @weekday  
    return(@days)  
end

 

 

posted @ 2013-10-30 15:54  田鼠斗王八  阅读(1184)  评论(0编辑  收藏  举报