如何编写一个sql来计算工作时间减去休息时间

时间:2018-08-23 09:45:57

标签: sql sql-server

我有一张轮班休息时间表

Begin        end
12:00        12:30
17:30        18:30

现在,我想编写一个SQL来计算给定开始和结束时间的实际工作时间。例如,如果从9:00开始到15:00结束,则实际时间为6休息时间= 5.5小时,如果从9:00开始到20:00结束,则实际时间为10小时。如何编写一个程序在SQL Server中进行检查?谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用DATEDIFF

尝试以下方式
 select *, CONVERT(time(7),DATEADD(s, DATEDIFF(s,S,E),'00:00:00')) from QQ

http://sqlfiddle.com/#!18/01213d/1

您的案例列名称将为

select *, CONVERT(time(7),DATEADD(s, DATEDIFF(s,Begin,end),'00:00:00')) from yourtable

答案 1 :(得分:0)

这里没有可用的架构详细信息,这意味着以下SQL是通用的,必须对其进行更改以适合您的数据库。

SELECT 
  (datediff(minute, shiftStartTime, shiftEndTime) 
  - datediff(minute,breakStartTime,breakEndTime)) / 60.0
FROM yourTable

注意:

  • 如果他们可以有多个休息时间,则需要在几分钟之内总结所有休息时间,然后再从轮班时间中扣除。
  • 该计算具体以分钟为单位,因为datediff会计算通过的边界数,因此,即使休息时间为2分钟,在11:59和12:01之间的以小时为单位的日期diff也算为1小时,如果您使用此功能计算小时数。

如果您可以提供更多架构详细信息,我们将能够编写出更完整的声明。