mssql sqlserver 获取指定日期为本月第几个工作日

2023-11-13

转自:https://www.cnblogs.com/lairui1232000/p/9286104.html

 摘要:
    下文讲述工作中,需要获取指定日期在当月的工作日

--------------------------------------------------
下文讲述常规的指定工作日所在月的天数分析,
实现思路:
1 生成一个国家法定假日表(A),非星期六,星期天
2 生成一个国家法定补办表(B),涉及星期六星期天调班
3 生成指定月份的日期流水表(C)
4 获取指定日期的工作日信息,如下所示:
 
 --例: 获取 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


 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mssql sqlserver 获取指定日期为本月第几个工作日 的相关文章

随机推荐