在sql server 2008中将十进制值(小时)转换为适当的小时

在sql server 2008中将十进制值(小时)转换为适当的小时,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个名为TimeSpent的Float类型的列 它包含值(即2.50、1.25、3.75、5.60) 我需要将这些小时值转换为适当的小时值,如(2:30、1:15、3:45、5:36)等 如何做到这一点?假设您已经创建了一个数据类型为time的列,那么您可以通过将TimePent的左侧连接到点,并将点的右侧部分乘以60来更新表 SQL Server 2012: UPDATE yourTable SET newTimeColumn = CONCAT(CAST(TimeSpentFloat AS

我有一个名为TimeSpent的Float类型的列

它包含值(即2.50、1.25、3.75、5.60)

我需要将这些小时值转换为适当的小时值,如(2:30、1:15、3:45、5:36)等


如何做到这一点?

假设您已经创建了一个数据类型为time的列,那么您可以通过将TimePent的左侧连接到点,并将点的右侧部分乘以60来更新表

SQL Server 2012:

UPDATE yourTable SET
newTimeColumn = CONCAT(CAST(TimeSpentFloat AS INT), ':', (TimeSpentFloat - CAST(TimeSpentFloat AS INT)) * 60);
SQL Server 2008及更低版本:

SELECT 
CAST(CAST(2.75 AS INT) AS CHAR) + ':' + CAST((2.75 - CAST(2.75 AS INT)) * 60 AS CHAR);

看看它是如何工作的。

只需计算一下:例如,通过将时间转换为int就可以得到时间。要获得分钟数,请将小数部分乘以60,以此类推。 在单个查询中执行此操作的快捷方法可以是:

declare @d float
set @d = 1.54
select cast(@d as int) h,
       cast((@d - cast(@d as int)) * 60 as int) m,
       cast(((@d - cast(@d as int)) * 60
            - cast((@d - cast(@d as int)) * 60 as int)) * 60 as int) s

尝试此
查询

select 
time_decimal
,cast(cast(cast(time_decimal as int) as varchar)+
':'+cast(cast((time_decimal - cast(time_decimal as int)) * 60 as int) as varchar)+
':'+cast(cast(((time_decimal - cast(time_decimal as int)) * 60-
    cast((time_decimal - cast(time_decimal as int)) * 60 as int)) * 60 as int) as varchar) as time) as real_time
from time1

Concat在SQL Server 2008中不起作用。获取错误为“Concat不是内置函数”@DharmendraSingh更新了我的答案。