选择时间总和

时间:2019-02-27 06:26:57

标签: sql ssms

我在SQL Server中有一个表,其中“时间”列的数据类型为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

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

尝试下面的方法-您不需要sum()函数,在您的情况下,它显示1,因为结果是5400/3600,即1,但是您需要添加浮点值,因为您期望的是浮点结果< / p>

 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

答案 2 :(得分: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

答案 3 :(得分:0)

尝试一下,您可以根据自己的需要更改datepart参数here is the full list

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

答案 4 :(得分: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)

没有理由将值分解为组成部分。这似乎不必要地复杂。