根据时间段计算工作日的天数(SqlServer),包含节假日的处理

根据时间段计算工作日的天数(SqlServer),包含节假日的处理,第1张

概述创建节假日表: 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]

创建节假日表:

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','admin','2014-2-20',1)
INSERT INTO [XHManage].[dbo].[HolIDay]([name],[Exchange])VALUES('春节','2014-1-31','2014-2-6',[Exchange])VALUES('清明节','2014-4-5','2014-4-7',[Exchange])VALUES('劳动节','2014-5-1','2014-5-3',[Exchange])VALUES('端午节','2014-6-2',[Exchange])VALUES('中秋节','2014-9-8',[Exchange])VALUES('国庆节','2014-10-1','2014-10-7',[Exchange])VALUES('春节调休','2014-1-26','2014-2-8',[Exchange])VALUES('劳动节调休','2014-5-4',[Exchange])VALUES('国庆节调休','2014-9-28','2014-10-11',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,enddate)) and [Exchange]=1
   if(@ID>0)
    select   @caldays=@caldays+1
     end
     select   @beginday=dateadd(day,@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),包含节假日的处理全部内容,希望文章能够帮你解决根据时间段计算工作日的天数(SqlServer),包含节假日的处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1171668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存