Sql Sum特定时间

时间:2012-05-22 06:25:42

标签: sql-server-2008

我的sql表中有一个varchar类型列,正在从中收集工作时间... 如果我像

那样给工作时间
WorkingHours
------------
     1
     5
     8

我可以找到此WorkHours列值的总和,如Sum(WorkingHours),但在这里我需要提供更具体的时间,如

WorkingHours
------------
    01:30
      2
    01:15
    04:45
像这样,是否有可能将这些值相加,我尝试的方式相同,但我无法提出任何解决方案,任何人都可以帮助我......

2 个答案:

答案 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