Sql server 查询钦命时期间隔职业日数、休息日数等日子操作

Sql server 查询钦命时期间隔职业日数、休息日数等日子操作

下文讲述常规的钦点专业日所在月的造化分析,
落到实处思路:
一 生成三个国家法定假期表(A),非星期四,周五
贰 生成二个国家官方补办表(B),涉及星期日周四调班
叁 生成钦点月份的日期流水表(C)
四 获取钦定日期的工作日音信,如下所示:

}

  

 

图片 1

System.TimeSpan
tsDiffer=dt二.Date-dt一.Date;//总结dt2和dt1之间相差多少天
int intDiffer=tsDiffer.Days;//相差天数的int值
for(int
i=0;i<intDiffer;i++)//从dt一起头一每一天加,决断权且的日期值是还是不是礼拜二或周三,如果既不是星期日,也不是星期6,而且也不在dt3和dt4之间,则该天为专门的工作日,intReturn加1
{
    DateTime dtTemp=dt1.Date.AddDays(i);
    if((dtTemp.DayOfWeek!=System.DayOfWeek.Sunday) &&
(dtTemp.DayOfWeek!=System.DayOfWeek.Saturday))
    {
        if((dtTemp.Date<dt3.Date) || (dtTemp.Date>dt4.Date))
        {
            intReturn++;
        }
    }
   
}
return intReturn;

  

二,总括内定日期段的苏息日

摘要:

/**//**//**//// <summary>
///
总计三个日子之间的做事日数,(星期六,星期三,不算专门的学业日)dt一和dt二之间相隔多少专门的学问日,在那之中dt三-dt肆的岁月为公共休假期,那里公共休假日能够用来个数组,大概从二个xml表里面读取,以便扣除
/// </summary>
/// <param name=”dt一”>要总结的开局时间</param>
/// <param name=”dt二”>要总计的告竣作时间间</param>
/// <param name=”dt三”>公休开首时间</param>
/// <param name=”dt四”>公休截至时间</param>
/// <returns>intReturn</returns>
private int DifferDate(DateTime dt1,DateTime dt2,DateTime dt3,DateTime
dt4)
{
int intReturn=0;//重回值,即dt二和dt一之间的做事日数

月初

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

下文讲述工作中,需求获得钦赐日期在前些时间的专门的工作日

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

写个主意总括出除开法定假期的职业日

转自:http://www.maomao365.com/?p=6771

二,计算钦点日期段的小憩日

SELECT   DATEADD(DAY,-1, DATEADD(MONTH,1, CONVERT(VARCHAR(7),GETDATE(),120)+'-01'))
--例: 获取 2018-4-10 为2018年4月的第几个工作日
declare @d datetime
set @d ='2018-4-10' --可通过下面的方法计算出 为本月第6个工作日

---1:获取4月指定日期的所在月工作日数
create table A(A datetime)
create table B(B datetime)
----4.5.4.6 4.7 4.30为法定假日
insert into A (A)values('2018-4-5'),
('2018-4-6'),('2018-4-7'),('2018-4-30')
----补班日 4月8 4月28 4月30 日
insert into B (B)values('2018-4-8'),
('2018-4-28'),('2018-4-30')

---生成指定月份(4月)所有天数流水
set datefirst 1 --设置星期一为第一个工作日

select * from 
(

select row_number() over(order by d asc ) as [本月第*个工作日],d,datepart(w,d) as [weekInfo] from (
select dateadd(day,number,'2018-4-1') as d from master..spt_values 
where type='p' 
and number >=0 
and dateadd(day,number,'2018-4-1') between '2018-4-1' and dateadd(day,-1,'2018-5-1')
) as a 
where a.d not in (select A from A)
and (a.d in (select b from B ) 
or datepart(w,a.d) not in (6,7) 
)
) as extend 
where d =@d 

go
drop table A 
drop table B
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

 


其1重中之重困难是官方节日,国家的合法节日每年都不平等,还涉嫌到调休,所以大家设计叁个假期表。首要字段有年度,类型(是不是调休),假日日期。如下:

我们写五个函数

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图