我在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
当你用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
SELECT (
DATEPART(hh,Time) +
DATEPART(mi,Time) / 60.0 +
DATEPART(ss,Time) / 3600.0
) AS TotalTime
FROM dbo.Table
尝试下面 - 你不需要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
试试这个,你可以根据你的需要更改datepart参数here is the full list
SELECT SUM(CAST(DATEDIFF(MINUTE, '00:00:00', [Time]) as float)/60) AS TotalHours FROM [dbo].[Table]
如果您想要十进制小时数的差异,请执行以下操作:
所以:
select sum(datediff(second, 0, v.t)) / (60.0 * 60)
from (values (convert(time, '00:10:01')),
(convert(time, '01:00:03'))
) v(t)
没有理由打破组件的价值。这似乎不必要地复杂化。