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

摘要:
下文講述工作中,需要獲取指定日期在當月的工作日


下文講述常規的指定工作日所在月的天數分析,
實現思路:
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