在SQL Server 2008中将十进制值(小时)转换为适当的小时数

时间:2013-05-10 07:45:40

标签: sql sql-server sql-server-2008

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

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

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

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

试试这个Query

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

<强> SQL FIDDLE

答案 1 :(得分:0)

假设您已经创建了一个具有数据类型时间的列,您可以通过连接TimeSpent的左边直到点和点的右边部分乘以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);

sqlfiddle中查看它。

答案 2 :(得分:0)

只需进行数学运算:例如,通过转换为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