获取列中的总小时数 SQL SERVER

Get the total sum hours in a column SQL SERVER

Sql Fiddle Example

我有这个结果table

 Id     Hours
 -----   -----
 1       09:00
 2       09:30
 3       10:00
 4       10:30
 5       11:00
 6       11:30
 7       12:00
 8       12:30
 9       13:00
10       13:30
11       14:00
12       14:30
13       15:00
14       15:30
15       16:00
16       16:30
17       17:00
18       17:30
19       18:00

我需要得到总小时数,例如从 09:00 到 18:00 总共有 :

9

小时,我需要得到这个小时总和

使用datediff函数

select datediff(hour,min(h),max(h)) from
(

select CAST(hour AS TIME) as h from Timetable
  ) as  t

非常不同意将时间值放在varchar中,所以最好将数据类型从varchar更改为time

你的table架构hourvarchar,你需要转换为时间,然后进行计算

SELECT  datediff(hour,min(cast(hour as time)),max(cast(hour as time)))
FROM Timetable

sqlfiddle

注意

我建议您的 hour 列为 datetimetime 而不是 varchar。因为hour专栏意图是时间。


编辑

如果你的时间是 9:00 to 17:30,你可以尝试使用 datediff 分钟来得到总的差异分钟数,然后除以 60 得到小时数。

SELECT datediff(minute,min(cast(hour as time)),max(cast(hour as time))) / CAST(60 as float)
FROM Timetable

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6e005cdfad4eca3ff7c4c92ef14cc9c7

declare @a time = '13:00',@b time = '17:30'  --- Here you can give time, what you need.
select distinct convert(varchar(20)
, datediff(MINUTE,@a,@b) / 60) 
  + ':' + 
  convert(varchar(20), datediff(MINUTE,@a,@b) % 60) 
from #Timetable 
where hour in (@a,@b)

对于您的 SQL Fiddle 示例数据。

显然,您需要使用 datediff()。但是,您应该以分钟或秒为单位执行 datediff(),然后转换为小时:

SELECT datediff(minute, min(cast(hour as time)), max(cast(hour as time))) / 60.0
FROM Timetable;

这将处理小时数不是准确小时数的情况。