2016-08-09 4 views
3

Я использую SQL Server 2008. У меня есть несколько строк start_time и end_time. Я хочу рассчитать среднюю разницу между этими двумя временами в формате MM: SS.Показать среднюю разницу между двумя полями времени как MM: SS в SQL

start_time | end_time  
10:15:30 | 10:15:45  
10:45:00 | 10:47:30 

Строка 1 будет отличаться от 00:15, а строка 2 будет отличаться от 02:30. Среднее значение всего набора данных будет 01:23 (1 минута и 23 секунды).

Код, который я использую, выглядит следующим образом, но возвращает целое число.

AVG(DATEDIFF(MI,start_time,end_time)) 

Заранее за вашу помощь.

ответ

1

Вы близки, но вы должны использовать DateDiff(), чтобы получить среднее количество секунд между двумя полями, а не среднее число минут.

С SQL Server 2008 R2, вы не имеете доступа к TIMEFROMPARTS(), который позволит упростить дисплей значительно, так что вы должны преобразовать это в VARCHAR, чтобы получить нужный формат.

;With AverageSeconds As 
(
    Select Avg(DateDiff(Second, Start_Time, End_Time))) AvgSec 
    From YourTable 
) 
Select Right('00' + Convert(Varchar, (AvgSec/60)), 2) 
      + ':' 
     + Right('00' + Convert(Varchar, (AvgSec % 60)), 2) 
From AverageSeconds 
+0

Это работает, спасибо! –

0

Вы можете конвертировать даты в unixtimestamp, а затем конвертировать секунды в строку.

0

Альтернативно

right(convert(varchar(20), Dateadd(second, Avg(Datediff(second, Start_Time, End_Time)), 0), 120), 5) 
+0

Отлично, спасибо! –