【问题标题】:Sql Server 2008 Exclude Company Holiday from DateDiffSql Server 2008 从 DateDiff 中排除公司假期
【发布时间】:2017-07-31 23:51:28
【问题描述】:

我有三张表,其中一张是包含公司假期指示器的主日历。我想从我的 DateDiff 计算中排除假日。以下是我所拥有的...

警报日期 2016 年 12 月 23 日 完成日期 12/28/16 company Holiday 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

【问题讨论】:

  • 还需要其他信息吗?
  • 不知道如何处理不包括假期。

标签: sql-server-2008 datediff


【解决方案1】:

在 2 个案例语句之后,您可以添加以下语句以从假期日历表中减去天数。

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

【讨论】:

  • 日历是一个完整的日历,当有假期时,指示器 = y。这应该在查询中表示出来,对吗?其次,我无法将其添加到上面的查询中。你能帮忙吗?
  • 我已经更新了我的问题,请参阅最后一条关于我在哪里挣扎的查询。
  • @John,我虽然假期日历表只有假期日期。下面的代码可以用来减去公司假期。 - (select ISNULL(count(1),0) from Cal where Cal.CALENDAR_DATE between ALERTS_CREATE_DT AND CreatedDate and GRH_HOLIDAY_IND ='Y')
  • 完美运行!
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多