mssql sqlserver 使用sql脚本计算两个日期之间的工作日及节假日天数的方法分享


摘要:
下文讲述使用sql脚本计算两个日期之间的工作日及节假日的方法
实验环境:sql server 2008 R2


实现思路:
1.设置一个法定节假日表(存储 劳动节 国庆节 端午节 春节等法定节假日数据)
2.编写一个sql 函数输入参数为: 起始日期和结束日期 输出信息为 工作日和节假日

---节假日数据表
create table [maomaoJieRi]
(dateJieRi date)
go
---基础数据生成
insert into [maomaoJieRi](dateJieRi)
values('2019-5-1'),('2019-5-2'),('2019-5-3')


--sql函数定义
go
create function dbo.fn_workDayAndHoliday
(@date1 datetime,@date2 datetime
)returns  @t table(hoildayCount int,weekDayCount int)  
as
begin 
   
  declare @h int  --节假日
  declare @w int  --工作日
  set @h =0;
  set @w =0


   while @date1<@date2
   begin
      if datename(weekday,@date1) <> N'星期六' 
	     and  datename(weekday,@date1) <> N'星期日' 
		 and not exists(select null from [maomaoJieRi] where dateJieRi=@date1)
	begin
	  set @w = @w+1 
	end
	else
	begin
	  set @h =@h+1 
	end

	set @date1 =dateadd(d,1,@date1)

   end

   insert into @t(hoildayCount,weekDayCount)
			values (@h,@w)
  return  
end
go

---数据测试

select * from   dbo.fn_workDayAndHoliday('2019-5-1','2019-5-8')

go 
drop function dbo.fn_workDayAndHoliday
go
truncate table [maomaoJieRi]
drop table [maomaoJieRi]