Какая боль. Я бы порекомендовал вычислять длительность в минутах или десятичных часах, а не преобразовывать обратно в строку. Идея состоит в том, чтобы извлечь из строки то, что вы хотите, и поместить ее в лучший формат:
select firstname,
sum( convert(int, left(durationofwork, 1)) * 60 +
convert(int, substring(durationofwork, 4, 2))
) as duration_minutes
from t
group by firstname;
Если ваши значения всегда меньше 24 часов - что, по-видимому, основано на формате - тогда я бы предложил хранить их как time
значения, а не как строки. Тем не менее, sum()
с может превышать 24 часа, поэтому вы не можете использовать time
с для агрегированных результатов.
РЕДАКТИРОВАТЬ:
Для обработки переменных минут:
select firstname,
sum( convert(int, left(durationofwork, 1)) * 60 +
convert(int, replace(substring(durationofwork, 4, 2), 'm', ''))
) as duration_minutes
from t
group by firstname;