我在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
答案 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)
如果您希望以十进制小时为单位的时差,请执行以下操作:
所以:
select sum(datediff(second, 0, v.t)) / (60.0 * 60)
from (values (convert(time, '00:10:01')),
(convert(time, '01:00:03'))
) v(t)
没有理由将值分解为组成部分。这似乎不必要地复杂。