Sql server 查询指定时间区间工作日数、休息日数等日期操作

1、查询指定时间区间的工作日

这个主要难点是法定节假日,国家的法定节假日每年都不一样,还涉及到调休,所以我们设计一个假日表。主要字段有年份,类型(是否调休),假期日期。如下:

CREATE TABLE [dbo].[Holidays](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Holiday] [datetime2](7) NULL,--假期日期
[YearS] [char](4) NULL,--年份
[daytype] [int] NULL--类型
)

添加好当年的假期和调休日期

写个方法计算出除开法定假日的工作日

ALTER FUNCTION [dbo].[GetWorkerDays]
(
-- Add the parameters for the function here
 @StartTime DATETIME, -- 起始时间
 @EndTime DATETIME -- 结束时间,查询默认小于此时间
)
RETURNS INT
AS
BEGIN
DECLARE @Total INT;
DECLARE @Temp INT;
DECLARE @Days INT;
DECLARE @Index INT;
SET @Days = DATEDIFF(DAY,@StartTime,@EndTime);
SET @Index = 0;
SET @Temp = 0;
SET @Total = 0;
WHILE @Index < @Days BEGIN
SET @Temp = DatePart(WEEKDAY,DATEADD(DAY,@Index,@StartTime));
IF @Temp > 1 AND @Temp < 7 BEGIN
SET @Total = @Total + 1;
END
SET @Index = @Index + 1;
END
RETURN ISNULL(@Total,0)
END

执行这个表值函数后加上调休日和减去法定假日就是工作日了,大家可以再写一个存储过程。

2,计算指定日期段的休息日

这个跟那个相反,就是星期天加上法定假日在减去调休日

我们写一个函数

扫描二维码关注公众号,回复: 14955241 查看本文章
ALTER FUNCTION GetRestDays
(
@StartTime DATETIME2,
@EndTime DATETIME2
)
RETURNS INT
AS
BEGIN
DECLARE @LegalRest INT --法定假期
DECLARE @AdjustmentDay INT--调休上班时间
DECLARE @SurplusDay INT --剩余工作日
DECLARE @CountDay INT --总共天数
SELECT @LegalRest=COUNT(0) FROM dbo.Holidays WHERE daytype=1 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE())
AND Holiday>=@StartTime AND Holiday<=@EndTime
SELECT  @AdjustmentDay=COUNT(0) FROM dbo.Holidays WHERE daytype=2 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE())
AND Holiday>=@StartTime AND Holiday<=@EndTime
 SET @SurplusDay= [dbo].[GetWorkerDays](@StartTime,DATEADD(DAY,1,@EndTime))--剩余工作日
 SELECT @CountDay=COUNT(0) FROM dbo.TimeSpanDays(@StartTime ,DATEADD(DAY,1,@EndTime))  --总共天数  计算出 时间段总共天数
 return @CountDay-@SurplusDay+@LegalRest-@AdjustmentDay
END

3、计算当前前月初日期和月末日期

月初

简单:

SELECT  CONVERT(VARCHAR(7),GETDATE(),120)+'-01'

月末日期

这个也简单简单:就是月第一天加一月再减去一天

SELECT   DATEADD(DAY,-1, DATEADD(MONTH,1, CONVERT(VARCHAR(7),GETDATE(),120)+'-01'))

猜你喜欢

转载自blog.csdn.net/lwf3115841/article/details/130354298
今日推荐