如何在SQL Server中获取时间总和

问题描述 投票:0回答:1

https://i.stack.imgur.com/wUwxR.png

我尝试过的是:

select  cast(sum(datediff(second,0,totalhr))/3600 as varchar(12)) + ':' + 
    right('0' + cast(sum(datediff(second,0,totalhr))/60%60 as varchar(2)),2) +
    ':' + right('0' + cast(sum(datediff(second,0,totalhr))%60 as varchar(2)),2) as total
    FROM   checkinout  where  YEAR(date)=2019 and  MONTH(date)=09 and userid=5

它给出错误的输出112:53:04正确的答案应该是116:30:04

c# sql sql-server plsql
1个回答
0
投票

只是一种推测,但整数除法可能会导致总计中的误差增加。请尝试用浮点数除以解决此问题:

SELECT
    CAST(SUM(DATEDIFF(second, 0, totalhr)) / 3600.0 AS varchar(12)) + ':' + 
    RIGHT('0' + CAST(SUM(DATEDIFF(second, 0, totalhr)) / 60.0 % 60 AS varchar(2)), 2) +
    ':' + RIGHT('0' + CAST(SUM(DATEDIFF(second, 0, totalhr)) % 60 AS varchar(2)), 2) AS total
FROM checkinout
WHERE
    YEAR(date) = 2019 AND
    MONTH(date) = 9 AND
    userid = 5;

轻微的浮点误差是解释为什么电流接近但不完全匹配的一个很好的选择。请注意,在其他一些数据库(例如MySQL)中,整数除法将自动生成浮点数,而无需显式强制转换。

© www.soinside.com 2019 - 2024. All rights reserved.