sqlserver计算两个日期之间的工作日(剔除周末及法定节假日)

sqlserver计算两个日期之间的工作日(剔除周末及法定节假日)

create function [dbo].[WorkDay]
(
@beginday   datetime,
@endday   datetime
)
returns int
AS
begin
	declare  @caldays   int  
	declare  @id   int
	select   @caldays=0	
 
	while  DATEDIFF(d, @beginday,@endday)>=0
	begin
		if  datepart(dw,@beginday)>1 and datepart(dw,@beginday)<7
			begin
				SELECT @id=count(*) from Holiday where @beginday between begin_date and DATEADD(s,-1,DATEADD(day,1,end_date)) and exchange=0
				if(@id=0)  
					select  @caldays=@caldays+1
			end
		else
			begin
				SELECT @id=count(*) from Holiday where @beginday between begin_date and DATEADD(s,-1,DATEADD(day,1,end_date)) and exchange=1
				if(@id>0)
					select  @caldays=@caldays+1
			end
		select  @beginday=dateadd(day,1,@beginday)
	end  
	return   @caldays
end

	

--select datepart(dw,'2022-02-06')

--select [dbo].[WorkDay]('2022-04-23','2022-04-24')
----节假日
insert into Holiday(fname,begin_date,end_date,exchange) values ('元旦','2022-01-01','2022-01-03',0);
insert into Holiday(fname,begin_date,end_date,exchange) values ('春节','2022-01-31','2022-02-06',0);
insert into Holiday(fname,begin_date,end_date,exchange) values ('清明节','2022-04-03','2022-04-05',0);
insert into Holiday(fname,begin_date,end_date,exchange) values ('劳动节','2022-04-30','2022-05-04',0);
insert into Holiday(fname,begin_date,end_date,exchange) values ('端午节','2022-06-03','2022-06-05',0);
insert into Holiday(fname,begin_date,end_date,exchange) values ('中秋节','2022-09-10','2022-09-12',0);
insert into Holiday(fname,begin_date,end_date,exchange) values ('国庆节','2022-10-01','2022-10-07',0);
----上班补充
insert into Holiday(fname,begin_date,end_date,exchange) values ('春节调休','2022-01-29','2022-01-30',1);--
insert into Holiday(fname,begin_date,end_date,exchange) values ('清明节调休','2022-04-02','2022-04-02',1);--
insert into Holiday(fname,begin_date,end_date,exchange) values ('劳动节调休','2022-04-24','2022-04-24',1);
insert into Holiday(fname,begin_date,end_date,exchange) values ('劳动节调休','2022-05-07','2022-05-07',1);
insert into Holiday(fname,begin_date,end_date,exchange) values ('国庆节调休','2022-10-08','2022-10-09',1);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值