计算除午休时间以外的工作时间

时间:2019-02-28 09:34:16

标签: sql sql-server

我有一张桌子

Main.storyboard

可以使用简单的SQL来计算工作时间,其中指定的开始和结束时间约为0.5小时。 例如从08:30开始到18:15结束,结果是8.5小时?谢谢

3 个答案:

答案 0 :(得分:1)

如果您只需要计算时间值并对所有时间求和,则可以使用timediff,您应该在SUM之后执行一些转换,例如TIME_TO_SEC和SEC_TO_TIME,以便以时间格式获取结果

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(end,start)))) FROM test WHERE type="work"

答案 1 :(得分:0)

您好,此查询和相关示例可以为您提供帮助:

CREATE TABLE #MyTable  
(PrimaryKey   int PRIMARY KEY,  
   DateValueBegin      DATETIME,
   DateValueEnd      DATETIME,
   TypeTime     varchar(40)
  );  
GO  

INSERT INTO #MyTable 
SELECT 1, DATEADD(HOUR,-5,GETDATE()), GETDATE(), 'WORK'
UNION
SELECT 2,  GETDATE(), DATEADD(HOUR,1,GETDATE()), 'LUNCH'
UNION 
SELECT 3, DATEADD(HOUR,1,GETDATE()), DATEADD(HOUR,3,GETDATE()), 'WORK'
UNION
SELECT 4, DATEADD(HOUR,3,GETDATE()), DATEADD(HOUR,4,GETDATE()), 'BREAK'
UNION
SELECT 5, DATEADD(HOUR,4,GETDATE()), DATEADD(HOUR,7,GETDATE()), 'WORK';

select * from #MyTable


select TypeTime, SUM( DATEDIFF(hour,  DateValueBegin, DateValueEnd)) AS 'TotalHour', SUM( DATEDIFF(MINUTE,  DateValueBegin, DateValueEnd)) AS 'TotalMinutes'
from #MyTable
Group By TypeTime

DROP TABLE  #MyTable

但是您会错过查询中的更多信息。

答案 2 :(得分:0)

将差值转换为分钟并累加起来:

select sum(datediff(minute, start, end)) / 60.0 as hours_working
from t
where type <> 'lunch'