SELECT SUM表示时间

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

我在SQL服务器中有一个表,其中“Time”列的数据类型为time(7)。需要调用此列的总和,当我使用以下语句时,它仅返回结果为整数。例如。如果总时间是1:30:00,我希望结果为1.5。但我使用的代码并没有让我这样,它得到的结果是1.请检查你是否有解决方案。

我用的代码是

SELECT SUM(DATEPART(ss,Time) + DATEPART(mi,Time)*60 + DATEPART(hh,Time)*3600)/3600 AS TotalTime FROM dbo.Table
sql ssms
5个回答
0
投票

当你用int类型划分某个值时,结果也将是int(该分数只是被删除)。因此,您需要将分隔符3600从int转换为decimal

SELECT SUM(DATEPART(ss,Time) + DATEPART(mi,Time)*60 + DATEPART(hh,Time)*3600)/CONVERT(DECIMAL(16,4), 3600) AS TotalTime FROM dbo.Table

2
投票
SELECT (
    DATEPART(hh,Time) +
    DATEPART(mi,Time) / 60.0 +
    DATEPART(ss,Time) / 3600.0
) AS TotalTime
FROM dbo.Table

1
投票

尝试下面 - 你不需要sum()函数,在你的情况下,它显示1,因为你的结果是5400/3600,这是1,但你需要添加一个浮点值,因为你期望浮点结果

 SELECT (DATEPART(ss,'1:30:00') + DATEPART(mi,'1:30:00')*60 + 
 DATEPART(hh,'1:30:00')*3600)/3600.00
 AS TotalTime FROM dbo.Table

1
投票

试试这个,你可以根据你的需要更改datepart参数here is the full list

SELECT SUM(CAST(DATEDIFF(MINUTE, '00:00:00', [Time]) as float)/60) AS TotalHours FROM [dbo].[Table]

0
投票

如果您想要十进制小时数的差异,请执行以下操作:

  • 将时间值转换为秒。
  • 求和秒数。
  • 除以60 * 60

所以:

select sum(datediff(second, 0, v.t)) / (60.0 * 60)
from (values (convert(time, '00:10:01')), 
             (convert(time, '01:00:03'))
     ) v(t)

没有理由打破组件的价值。这似乎不必要地复杂化。

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