我的sql表中有一个varchar类型列,正在从中收集工作时间... 如果我像
那样给工作时间WorkingHours
------------
1
5
8
我可以找到此WorkHours列值的总和,如Sum(WorkingHours)
,但在这里我需要提供更具体的时间,如
WorkingHours
------------
01:30
2
01:15
04:45
像这样,是否有可能将这些值相加,我尝试的方式相同,但我无法提出任何解决方案,任何人都可以帮助我......
答案 0 :(得分:2)
为什么将时间存储为varchar?当然使用时间或日期时间......
请注意,“2”,如果可转换,则为48小时或2天。如果您不想修复数据或数据类型,则必须解决此问题
DECLARE @feckedTable TABLE (WorkingHours varchar(5));
INSERT @feckedTable (WorkingHours) VALUES ('01:30'), ('02:00'), ('01:15'), ('04:45');
SELECT
SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
FROM
@feckedTable
SELECT
CAST(TotalTime/60 AS varchar(4)) + ':' + CAST(TotalTime % 60 AS char(2))
FROM
(
SELECT
SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
FROM
@feckedTable
) X
答案 1 :(得分:1)
从表中选择强制转换(dateadd(毫秒,总和(datediff(毫秒,0,强制转换(总时间为日期时间))),0)作为时间)
这是将精度提高到毫秒的语法。
有关详细说明,请参阅this solution。