sql - 在 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
任何帮助都会很棒。
解决方案
多么痛苦。我建议将持续时间计算为分钟或十进制小时,而不是转换回字符串。这个想法是从字符串中提取您想要的内容并将其以更好的格式放置:
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 小时,因此您不能将time
s 用于聚合结果。
编辑:
要处理可变分钟数:
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;
推荐阅读
- octave - 在 Octave 上更改默认编辑器会出现错误消息
- javascript - 渲染后如何执行除“setTimeout()”之外的函数
- sql - 规范化,根据问题正确引用
- python - 如何在 Django 表单中进行密码和确认密码验证
- php - 尝试使用 PHP 从 Instagram 获取提要
- jenkins - Jenkins 中的 zip 工件
- php - 从一定数量的 Laravel 中取值
- android - 如何在 GoogleMap 的某个地图位置放置视图?
- java - 如何在 Intellij 中优雅地关闭 gradle/设置 java 应用程序的 java 选项
- python - 运行一段时间时出现Python线程内存错误