我有一张表格,其中包含当年的公众假期清单。现在,这里的工作日是周一至周六。所以,我试图将年度假期表与我的查询联系起来,以便获得给定时间间隔(年,月,周等)的工作日列表 我有代码给了我工作日,包括星期六,但我无法减去(链接)年假。
获取工作日的代码:
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2017-12-01 10:00:00.000'
SET @EndDate = '2017-12-31 00:00:00.000'
SELECT
(DATEDIFF(dd, @StartDate, @EndDate) + 1)
-(DATEDIFF(wk, @StartDate, @EndDate))
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) AS WorkingDays
表AnnualHolidays
具有布局:
Id Date Description
----------- ----------------------- -------------------
50 2017-10-21 00:00:00.000 Holiday 1
49 2017-10-20 00:00:00.000 Holiday 2
那么,有没有办法可以减去@StartDate
和@EndDate
间隔内的年假,这样我就可以获得指定时间间隔的实际工作日
答案 0 :(得分:1)
一种方法是生成有效范围,然后减去假期并计算结果。我在日期范围内使用递归函数,但有http://bit.kuas.edu.tw/~8051/种方法可以在更大的范围内更有效。
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2017-12-01 10:00:00.000'
SET @EndDate = '2017-12-31 00:00:00.000'
;WITH Dates AS (
SELECT
[Date] = @StartDate
UNION ALL
SELECT
[Date] = DATEADD(DAY, 1, [Date])
FROM
Dates
WHERE
Date <= @EndDate
)
SELECT COUNT(*)
from
(
SELECT
[Date]
FROM
Dates
WHERE
DATENAME(dw, [Date]) != 'Sunday'
EXCEPT
select
[Date]
from
AnnualHolidays
) tbl