在 SQL 服务器中使用 SUM 函数将 nvarchar 值添加为时间

Adding nvarchar values as Time using SUM function in SQL Server

我在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

我需要 return 每个人的工作时间总和。

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

任何帮助都会很棒。

真痛苦。我建议将持续时间计算为分钟或小数小时,而不是转换回字符串。这个想法是从字符串中提取你想要的内容并将其放在更好的格式中:

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()s 可能会超过 24 小时,因此您不能将 times 用于聚合结果。

编辑:

处理可变分钟:

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;