Добавление значений nvarchar как времени с использованием функции SUM на SQL сервере - PullRequest
0 голосов
/ 20 апреля 2020

Я все еще ладья ie на SQL Сервере, поэтому я не могу понять это.

У меня есть столбец, заполненный nvarchar значениями, которые мне нужно сложить как durationOfWork, поэтому он должен выполнять функцию суммы для значений времени.

Столбцы выглядят так:

DurationOfWork  FirstName
--------------------------
1h:30min        Peter
2h:0min         Sandra
0h:10min        Peter
5h:32min        Peter
2h:0min         Dave
1h:43min        Dave
0h:25min        Sandra

Мне нужно вернуть для каждого Человека сумму их продолжительности. работы.

SUM(DurationOfWork)  FirstName
------------------------------
7h:12min             Peter
2h:25min             Sandra
3h:43min             Dave

Любая помощь будет отличной.

1 Ответ

3 голосов
/ 20 апреля 2020

Какая боль. Я бы порекомендовал вычислять длительность в минутах или десятичных часах, а не преобразовывать обратно в строку. Идея состоит в том, чтобы извлечь из строки то, что вы хотите, и поместить ее в лучший формат:

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;
...