SqlServer计算2个时间的间隔时间(工作日时间),不包括法定节假日和周末

本文介绍了一种在SQL Server中计算两个时间点间的工作日小时数的方法,排除周末和法定节假日,适用于统计需求。通过创建节假日表并关联目标表,实现了精确计算。

   最近在统计计算的时候,有一个需求是计算关闭时间-开始时间的小时数,但是如果中间有周末或者法定节假日不能包括在内,只计算工作日的小时数

   在网上查询了很多资料后发现,有2种做法  第1种是使用存储过程的方式,另1种方法是需要一张法定节假日的表,然后关联一下,进行计算和查询。在这里我使用的是第二种方式,网上可以下载的到 例如2020年法定节假日和周末数据: https://download.csdn.net/download/u014508939/12650095  这是我上传的资源  下面我可以把数据提供出来:

如果导入失败或者错误的话 改下库名和位置就行,我这里的名称是dbo的这个,所以用的话 改成自己的

/*

Navicat Premium Data Transfer

 

Source Server : 关的sqlserver

Source Server Type : SQL Server

Source Server Version : 14003048

Source Host : 118.89.222.159:1433

Source Catalog : test

Source Schema : dbo

 

Target Server Type : SQL Server

Target Server Version : 14003048

File Encoding : 65001

 

Date: 22/07/2020 11:06:38

*/


 

-- ----------------------------

-- Table structure for sheet2

-- ----------------------------

IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sheet2]') AND type IN ('U'))

  DROP TABLE [dbo].[sheet2]

GO

 

CREATE TABLE [dbo].[sheet2] (

[ID] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

[Hoilday] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,

[CalcData] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

)

GO

 

ALTER TABLE [dbo].[sheet2] SET (LOCK_ESCALATION = TABLE)

GO


 

-- ----------------------------

-- Records of sheet2

-- ----------------------------

INSERT INTO [dbo].[sheet2] VALUES (N'1', N'2020-01-01', N'2020-01-02')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'2', N'2020-01-04', N'2020-01-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'3', N'2020-01-05', N'2020-01-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'4', N'2020-01-11', N'2020-01-13')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'5', N'2020-01-12', N'2020-01-13')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'6', N'2020-01-18', N'2020-01-19')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'7', N'2020-01-24', N'2020-01-26')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'8', N'2020-01-25', N'2020-01-26')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'9', N'2020-01-26', N'2020-01-28')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'10', N'2020-01-27', N'2020-01-28')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'11', N'2020-01-28', N'2020-01-30')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'12', N'2020-01-29', N'2020-01-30')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'13', N'2020-01-30', N'2020-01-31')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'14', N'2020-02-02', N'2020-02-03')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'15', N'2020-02-08', N'2020-02-10')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'16', N'2020-02-09', N'2020-02-10')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'17', N'2020-02-15', N'2020-02-17')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'18', N'2020-02-16', N'2020-02-17')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'19', N'2020-02-22', N'2020-02-24')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'20', N'2020-02-23', N'2020-02-24')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'21', N'2020-02-29', N'2020-03-02')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'22', N'2020-03-01', N'2020-03-02')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'23', N'2020-03-07', N'2020-03-09')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'24', N'2020-03-08', N'2020-03-09')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'25', N'2020-03-14', N'2020-03-16')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'26', N'2020-03-15', N'2020-03-16')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'27', N'2020-03-21', N'2020-03-23')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'28', N'2020-03-22', N'2020-03-23')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'29', N'2020-03-28', N'2020-03-30')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'30', N'2020-03-29', N'2020-03-30')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'31', N'2020-04-04', N'2020-04-07')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'32', N'2020-04-05', N'2020-04-07')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'33', N'2020-04-06', N'2020-04-07')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'34', N'2020-04-11', N'2020-04-13')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'35', N'2020-04-12', N'2020-04-13')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'36', N'2020-04-18', N'2020-04-20')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'37', N'2020-04-19', N'2020-04-20')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'38', N'2020-04-25', N'2020-04-26')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'39', N'2020-05-01', N'2020-05-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'40', N'2020-05-02', N'2020-05-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'41', N'2020-05-03', N'2020-05-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'42', N'2020-05-04', N'2020-05-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'43', N'2020-05-05', N'2020-05-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'44', N'2020-05-10', N'2020-05-11')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'45', N'2020-05-16', N'2020-05-18')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'46', N'2020-05-17', N'2020-05-18')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'47', N'2020-05-23', N'2020-05-25')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'48', N'2020-05-24', N'2020-05-25')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'49', N'2020-05-30', N'2020-06-01')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'50', N'2020-05-31', N'2020-06-01')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'51', N'2020-06-06', N'2020-06-08')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'52', N'2020-06-07', N'2020-06-08')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'53', N'2020-06-13', N'2020-06-15')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'54', N'2020-06-14', N'2020-06-15')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'55', N'2020-06-20', N'2020-06-22')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'56', N'2020-06-21', N'2020-06-22')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'57', N'2020-06-25', N'2020-06-28')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'58', N'2020-06-26', N'2020-06-28')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'59', N'2020-06-27', N'2020-06-28')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'60', N'2020-07-04', N'2020-07-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'61', N'2020-07-05', N'2020-07-06')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'62', N'2020-07-11', N'2020-07-13')

GO

 

INSERT INTO [dbo].[sheet2] VALUES (N'63', N'2020-07-12', N'2

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值