首页 > 解决方案 > 在 SQL Server 中使用 SUM 函数将 nvarchar 值添加为时间

问题描述

我仍然是 SQL Server 的新手,所以我不太清楚这一点。

我有一列填充了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

任何帮助都会很棒。

标签: sqlsql-servernvarchar

解决方案


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

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;

推荐阅读