Получить общую сумму часов в столбце SQL SERVER - PullRequest
0 голосов
/ 17 сентября 2018

Пример Sql Fiddle

У меня есть эта таблица результатов

 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

часов, мне нужно получить эту сумму часов

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Очевидно, вам нужно использовать datediff(). Однако вы должны выполнить datediff() в минутах или секундах, а затем преобразовать в часы:

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

Это относится к случаю, когда количество часов не является точным числом часов.

0 голосов
/ 17 сентября 2018

Ваша табличная схема hour равна varchar, вам нужно разыграть как время, затем выполнить расчет

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

sqlfiddle

Примечание

Я бы предложил ваш столбец hour как datetime или time вместо varchar. потому что hour намерение столбца - это время.


EDIT

Если ваше время 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

0 голосов
/ 17 сентября 2018
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.

0 голосов
/ 17 сентября 2018

использование datediff функция

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

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

категорически не согласен указывать значение времени в varchar, поэтому лучше изменить тип данных с varchar на время

...