【问题标题】:Calculate Expected End Time In SQL Server计算 SQL Server 中的预期结束时间
【发布时间】:2018-12-08 11:44:26
【问题描述】:

我的 SLA 政策如下: 工作日:周一至周五。 工作时间:上午 9 点至下午 6 点。

除此之外,其他工作时间均被视为非营业时间。 所有计算均不包括周六、周日和节假日。

场景 1:工单创建为 2018 年 6 月 29 日星期五 17:30(下午 5:30)。工作时间后的持续时间为 12 小时(或 720 分钟)。 我想计算,预计结束日期,大约是 2018 年 7 月 2 日星期一上午 6 点,因为从 6 月 29 日下午 6 点到晚上 11:59,它是在营业时间之后,周一从 12 点到 6 点,它是营业时间之后。

场景 2:如果是工作时间之后的 18 小时,那么结束日期大约是 7 月 2 日星期一晚上 9 点 21:00。 6 小时(6 月 29 日)+ 9 小时(7 月 2 日早上)+ 3 小时(7 月 2 日晚上)。

在计算 SQL Server 2008 中的预期结束日期和时间时,如何计算工作时间后的时间?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 没什么,他只是来找答案的,带着它离开,然后用另一个昵称回来。
  • @SnakeFoot - 我尝试使用时间计算,如link 所示。它适用于从上午 9 点到下午 6 点的正常班次配置。我想创建非工作时间的预计完成日期和时间。

标签: sql sql-server sql-server-2008 datetime


【解决方案1】:

这应该让你开始,我一直在做类似的事情 - 你可能想考虑创建一个假期表......

DECLARE @d1 DATETIME = '2018-06-01', 
        @d2 DATETIME = '2018-06-04'

SELECT Datediff(dd, @d1, @d2) 
      + CASE WHEN Datepart(dw, @d1) = 7 THEN 1 ELSE 0 END 
       - (Datediff(wk, @d1, @d2) * 2 ) 
       - CASE WHEN Datepart(dw, @d1) = 1 THEN 1 ELSE 0 END + 
       - CASE WHEN Datepart(dw, @d2) = 1 THEN 1 ELSE 0 
END AS DaysBetween

【讨论】:

  • 这不考虑创建工单后一天的剩余时间以计算营业时间后的总时间。天数不是必需的。需要实际的预计日期和时间。
  • 不,但它确实向您展示了如何避免计算周末。您需要将其与... Declare @DT as Datetime = '2018-06-29 17:30:00' Select @DT, DATEADD(MINUTE, 720, @DT) as Later
猜你喜欢
  • 2022-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多