hours.minutes 六十进制 SUM

hours.minutes sexagesimal SUM

我有一个包含 2 列的 table,Hours 和 TotalHours,均为数字 (5,2),我想对所有行求和。

如下图所示,各列之间的区别在于,第一列包含六十进制格式的分钟,而第二列包含百进制格式的分钟(minutes : 60 = x : 100)

独立于我正在使用的列和格式,如何获得 sexagesimal 格式的所有行的总和?

注:
1) 我正在使用 SQL SERVER 2008.
2) 我必须使用数字 (5,2) 格式作为两列的输入。

查看您的数据,您可以通过对小数列求和并将结果转换为六十进制格式来简化此操作

select cast(12.71 as int) + (12.71 - cast(12.71 as int)) * 60/100

或者您可以将六十进制格式的列转换为十进制并像这样求和

select Sum(cast(12.43 as int) + (12.43 - cast(12.43 as int)) * 100/60.00)

然后应用上面的方法将其转换回六十进制格式

-- As suggested by jarlh and by user3540780 I resolved with this:

DECLARE @Hours as Table(
    TotalHours numeric(5,2)
)

INSERT INTO @Hours VALUES(12.81)
INSERT INTO @Hours VALUES(3.71)
INSERT INTO @Hours VALUES(11.12)
INSERT INTO @Hours VALUES(1.01)
INSERT INTO @Hours VALUES(6.30)
INSERT INTO @Hours VALUES(9.88)
INSERT INTO @Hours VALUES(10.91)
INSERT INTO @Hours VALUES(9.88)
INSERT INTO @Hours VALUES(0.28)

SELECT CAST(SUM((CAST(TotalHours as int)) + ((TotalHours - CAST(TotalHours as int)) * 60/100)) as numeric(5,2)) as SumSexagesimalHours
FROM @Hours