0

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

WorkingHours
------------
     1
     5
     8

我可以找到这个 WorkingHours 列值的总和Sum(WorkingHours),但在这里我需要给出更具体的时间,比如

WorkingHours
------------
    01:30
      2
    01:15
    04:45

像这样,是否可以对这些值求和,我尝试了同样的方法,但我无法想出任何解决方案,任何人都可以在这里帮助我......

4

2 回答 2

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
于 2012-05-22T06:50:45.987 回答
1

从表中选择 cast(dateadd(millisecond,sum(datediff(millisecond,0,cast(totalhrs as datetime))),0) as time)

这是获得精确到毫秒的语法。

有关详细说明,请参阅此解决方案。

于 2012-05-22T06:29:15.333 回答