从总小时减去30分钟

时间:2013-01-07 14:35:25

标签: sql sql-server-2008

我目前有一个包含计算列规范的TotalHours列,其中包含以下内容

(isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0))

这给了我2个regin和regout之间的总小时数。

现在。我计划从计算小时数超过6.5小时的总小时数中减去30分钟。

我尝试用case语句来做。但迷路了。

感谢任何帮助或指示

感谢。

2 个答案:

答案 0 :(得分:2)

这是一种方式:

coalesce((datediff(minute,[RegIn],[RegOut])/60.0 -
          (case when datediff(minute,[RegIn],[RegOut]) > 6.5*60 then 0.5 else 0 end),
         0)

答案 1 :(得分:2)

由于您的值有一个复杂的表达式,因此您必须多次使用该表达式。考虑它的一种方法是用占位符替换复杂的表达式,如TotalHours,然后在找出逻辑后再将表达式放回去。

TotalHours - 
    Case When TotalHours > 6.5 Then 0.5 Else 0 End

这表示当总小时数大于6.5小时时,总小时数应减少0.5(30分钟)。以上述方式编写它会减少TotalHours的重复。现在将原始复杂表达式插回到:

(isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0)) -
    Case When (isnull(datediff(minute,[RegIn],[RegOut]),(0))/(60.0)) > 6.5
        Then 0.5 Else 0 End