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
只是一种推测,但整数除法可能会导致总计中的误差增加。请尝试用浮点数除以解决此问题:
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)中,整数除法将自动生成浮点数,而无需显式强制转换。