根据时间段计算工作日的天数(SqlServer),包含节假日的处理
来源:互联网 发布:淘宝店头像在线制作 编辑:程序博客网 时间:2024/05/23 21:38
创建节假日表:
USE [XHManage]
GO
/****** Object: Table [dbo].[Holiday] Script Date: 02/20/2014 17:51:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Holiday](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[BeginDate] [datetime] NOT NULL,
[EndDate] [datetime] NOT NULL,
[AddUser] [nvarchar](50) NOT NULL,
[AddTime] [datetime] NOT NULL,
[Exchange] [bit] NOT NULL,
CONSTRAINT [PK_Holiday] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Holiday] ADD CONSTRAINT [DF_Holiday_AddTime] DEFAULT (getdate()) FOR [AddTime]
GO
ALTER TABLE [dbo].[Holiday] ADD CONSTRAINT [DF_Holiday_Exchange] DEFAULT ((0)) FOR [Exchange]
GO
输入数据(2014年国家节假日设置数据):
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('元旦','2014-1-1','2014-1-1','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('春节','2014-1-31','2014-2-6','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('清明节','2014-4-5','2014-4-7','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('劳动节','2014-5-1','2014-5-3','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('端午节','2014-6-2','2014-6-2','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('中秋节','2014-9-8','2014-9-8','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('国庆节','2014-10-1','2014-10-7','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('春节调休','2014-1-26','2014-1-26','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('春节调休','2014-2-8','2014-2-8','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('劳动节调休','2014-5-4','2014-5-4','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('国庆节调休','2014-9-28','2014-9-28','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[Holiday]([Name] ,[BeginDate] ,[EndDate] ,[AddUser] ,[AddTime] ,[Exchange])VALUES('国庆节调休','2014-10-11','2014-10-11','admin','2014-2-20',1)
go
create function [dbo].[WorkDay]
(
@beginday datetime,
@endday datetime
)
returns int
AS
begin
--set datefirst 1
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 begindate and DATEADD(s,-1,DATEADD(day,1,enddate)) and [Exchange]=0
if(@id=0)
select @caldays=@caldays+1
end
else
begin
SELECT @id=count(*) from Holiday
where @beginday between begindate and DATEADD(s,-1,DATEADD(day,1,enddate)) and [Exchange]=1
if(@id>0)
select @caldays=@caldays+1
end
select @beginday=dateadd(day,1,@beginday)
end
return @caldays
end
测试:
go
select dbo.[WorkDay]('2014-10-1','2014-10-31')as '工作日'
select dbo.[WorkDay]('2014-9-1','2014-9-30')as '工作日'
select dbo.[WorkDay]('2014-9-30','2014-9-30')as '工作日'
select dbo.[WorkDay]('2014-6-1','2014-6-30')as '工作日'
- 根据时间段计算工作日的天数(SqlServer),包含节假日的处理
- 计算2个时间之间的工作日天数 是否假日表t_sys_holiday 节假日可以自己配置
- java计算两个日期之前的天数(工作日),排除节假日和周末
- 员工节工作日,节假日,班次的处理...
- sql如何计算两个日期间的工作日,剔除节假日
- 计算两日期之间的工作日天数
- 计算两个日期之间的工作日天数
- java 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期
- java 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期
- 算出截止到指定年份的所有天数中,那些是节假日,那些是工作日
- java计算两个时间段的重合天数
- java计算两个时间段的精确天数
- PHP计算指定时间段内周末天数(星期日天数)、双休天数、总工作日天数
- Java时间之间的天数计算,工作日计算
- 添加工作日,排除时间段内节假日
- 在Access中计算两个日期之间的工作日天数
- 工作日计算(含节假日)
- 计算两个日期之间的工作日(去掉周末和节假日)
- IOS7 隐藏状态栏 (电池栏)
- C#在button上显示图片
- TabBar背景色
- C++ SELECT
- 图像球面化算法的理解与实现
- 根据时间段计算工作日的天数(SqlServer),包含节假日的处理
- Linux 上实现双向进程间通信管道
- (三)字符串、向量、数组
- 写给那些让我糊里糊涂的HTTP、TCP、UDP、Socket
- 智能指针
- #爱加密杯#Navigation Drawer详解-Google推出的用来取代Sliding Menu的控件(一)
- 风宇冲Unity3D教程学院-----Shader篇
- solaris 的syslog 在什么位置
- 守护进程的编程规则(学fork必看)