2012-02-09 134 views
0

请帮忙。今天和工作日至今年年底之间的工作日数

试图计算今天和工作数量之间的工作天数,说到SQL年的结束。

我已经开始与下面..日期差异只是今天和年底之间的天数..但我需要它的工作日 - 即其中cal.Weekday =''或HOLIDAY.DateInfo >'

CASe 
    when cal.Weekday = ' 'OR HOLIDAY.DateInfo>' ' then 0 else 1 end as workingdays, 
    DateDiff("y",GETDATE(),DATEADD(s,-1,DATEADD(YY, DATEDIFF(YYYY,0,@StartDate)+1,0))) as enddateddd, 
+1

一工作日定义为周一至周五,节假日除外? – Yuck 2012-02-09 14:57:22

+0

是因此cal.Weekday =''或HOLIDAY.DateInfo>''carters只有工作日,当我总结,我得到249 – user1143563 2012-02-09 14:59:43

+0

你有一个日历和(单独)假期表是正确的吗?我们可以看到这些布局吗? – 2012-02-09 17:01:19

回答

1

这会给你个工作日(MF只),作为holdays我不知道你的假期是什么,所以你需要添加部分:

DECLARE @today AS DATE = GETDATE(); 
DECLARE @firstOfNextYear AS DATE = CAST('1/1/' + STR(1 + YEAR(GETDATE())) AS DATE); 

WITH L0 AS (SELECT 1 AS C UNION ALL SELECT 1),  --  2 
    L1 AS (SELECT L0.C FROM L0 CROSS JOIN L0 AS B), --  4 
    L2 AS (SELECT L1.C FROM L1 CROSS JOIN L1 AS B), --  16 
    L3 AS (SELECT L2.C FROM L2 CROSS JOIN L2 AS B), -- 256 
    L4 AS (SELECT L3.C FROM L3 CROSS JOIN L3 AS B), -- 65536 
     N AS (SELECT ROW_NUMBER() OVER(ORDER BY L4.C) AS n FROM L4), 
     D AS (SELECT DATEADD(DAY, n - 1, @today) AS d, n FROM N) 
SELECT COUNT(*) FROM D 
WHERE d < @firstOfNextYear 
    AND DATEPART(WEEKDAY, d) BETWEEN 2 AND 6 
+0

谢谢你会试试这个 – user1143563 2012-02-09 15:27:48