Sql Server 2008从DateDiff中排除公司假日

时间:2017-03-10 15:13:18

标签: sql-server-2008 datediff

我有三张桌子,其中一张是主日历,里面有公司假期的指标。我想从我的DateDiff计算中排除Holiday。以下就是我的......

提醒日期12/23/16 完成日期12/28/16 公司假日12/26/16需要从DateDIff计算中排除

- 我的计算显示3个工作日应排除12/26/16 = 2个工作日

 DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate) 
           -(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2)  --HOW MANY WEEKEND DAYS PASSED BY
           -(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'Sunday' THEN 1 ELSE 0 END) 
           -(CASE WHEN DATENAME(DW,S.CreatedDate) = 'Saturday' THEN 1 ELSE 0 END) 
           -(CASE WHEN CAL.GRH_HOLIDAY_IND = 'Y' THEN 1 ELSE 0 END) 
           -(  SELECT COUNT(CAL.GRH_HOLIDAY_IND)
               FROM  A
               FULL OUTER JOIN S ON A.ID= S.ID
               INNER JOIN  CAL ON  A.ALERTCREATEDT_MMDDYYYY = CAL.CALENDAR_DATE
               WHERE 1=1
               AND Cal.GRH_HOLIDAY_IND = 'Y' 
               AND CAL.CALENDAR_DATE  between CAST(A.CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE) ) AS BusinessDays

试图删除假期是我挣扎的地方,见下文。

-(  SELECT COUNT(CAL.GRH_HOLIDAY_IND)
               FROM  A
               FULL OUTER JOIN S ON A.ID= S.ID
               INNER JOIN  CAL ON  A.ALERTCREATEDT_MMDDYYYY = CAL.CALENDAR_DATE
               WHERE 1=1
               AND Cal.GRH_HOLIDAY_IND = 'Y' 
               AND CAL.CALENDAR_DATE  between CAST(A.CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE

1 个答案:

答案 0 :(得分:0)

在2个案例陈述之后,您可以添加以下陈述,以减去假日日历表中的天数。

- (select ISNULL(count(1),0) from Cal where Cal.Holiday between ALERTS_CREATE_DT AND CreatedDate )