在sql server 2008中将十进制值(小时)转换为适当的小时
我有一个名为TimeSpent的Float类型的列 它包含值(即2.50、1.25、3.75、5.60) 我需要将这些小时值转换为适当的小时值,如(2:30、1:15、3:45、5:36)等在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
如何做到这一点?假设您已经创建了一个数据类型为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更新了我的答案。