Sql 如何将时间之和设为浮点

Sql 如何将时间之和设为浮点,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,表的浮点数据类型中有一个时间列,如下所示: 40m 11m 2m 0m 3m 1m 1m 如何将这些值相加以小时和分钟为单位?您可以使用dateadd()然后将结果转换回时间: select cast(dateadd(minute, sum(col), 0) as time) from t; 注意:这只适用于23:59:00。SQL Server时间类型不支持较大的值 您可以使用Gordon的答案,它直接利用SQL Server的内置时间功能。另一种方法是“暴力”方法,计算时间列总和所代表的

表的浮点数据类型中有一个时间列,如下所示:

40m
11m
2m
0m
3m
1m
1m
如何将这些值相加以小时和分钟为单位?

您可以使用
dateadd()
然后将结果转换回时间:

select cast(dateadd(minute, sum(col), 0) as time)
from t;
注意:这只适用于
23:59:00
。SQL Server时间类型不支持较大的值


您可以使用Gordon的答案,它直接利用SQL Server的内置时间功能。另一种方法是“暴力”方法,计算时间列总和所代表的小时数和分钟数:

WITH cte AS (
    -- strip off 'm' units and convert to numbers
    SELECT CONVERT(int, REPLACE(time, 'm', '')) AS time
    FROM yourTable
)

SELECT
    CONVERT(varchar(10), FLOOR(SUM(time) / 60)) + ':' +
    CONVERT(varchar(10), FLOOR(SUM(time) % 60)) AS timestamp
FROM cte;


演示显示,即使列中的分钟数应超过24小时,逻辑仍然有效。

获取此错误消息Msg 8117,级别16,状态1,第2行操作数数据类型nvarchar对于sum运算符无效。@kalpna您是否确实将时间存储为例如
10m
,作为文本?请不要那样做。将数字数据存储为数字。我已经更新了我的答案。@kalpna如果这个答案解决了您的问题,请将其标记为正确。左边的绿色复选标记。什么是
m
?在C#中,
m
后缀表示
decimal
类型。您是否已将时间存储为文本?(而且不像你说的那样浮动?)