SQL:浮点数到小时格式

时间:2011-05-19 17:42:06

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

是否有一种简单的方法可以在Ms SQL Server 2008中以小时为单位格式化浮点数?

示例:

  • 1.5 - > 01:30
  • 9.8 - > 09:48
  • 35.25 - > 35:15

非常感谢。

5 个答案:

答案 0 :(得分:6)

我喜欢这个问题!

DECLARE @input float = 1.5;

DECLARE @hour int = FLOOR(@input);
DECLARE @minutes int = (SELECT (@input - FLOOR(@input)) * 60);

SELECT RIGHT('00' + CONVERT(varchar(2), @hour), 2) + ':' + RIGHT('00' + CONVERT(varchar(2), @minutes), 2);

答案 1 :(得分:3)

SELECT SUBSTRING(CONVERT(NVARCHAR, DATEADD(MINUTE, 1.5*60, ''), 108), 1, 5)

这适用于:

  • 从“零”日期开始

  • 添加1.5 x 60分钟(即1.5小时)

  • 将结果格式化为时间,hh:mm:ss(即格式“108”)

  • 修剪秒部分

由于DATEADD函数将偏移量截断为最接近的整数,因此必须使用1.5 x 60分钟而不是1.5小时。如果您需要高分辨率偏移,可以使用SECOND代替,适当缩放(例如小时* 60 * 60)。

答案 2 :(得分:2)

不确定。容易,但不完全......直截了当:

declare @hours float 
set     @hours = -9.8

select substring('-  ',2+convert(int,sign(@hours)),1)                                        -- sign
     + right('00' + convert(varchar,                       floor(abs(@hours)))         , 2 ) -- hours component
     + ':'                                                                                   -- delimiter
     + right('00' + convert(varchar,round( 60*(abs(@hours)-floor(abs(@hours))) , 0 ) ) , 2 ) -- minutes

另一种可以提供正确结果的选项。您可能需要将其调整为圆形分钟并确保两个字段均为2位数。

declare @hours float 
set     @hours = -9.8

select       convert(varchar, datediff(minute,dateadd(minute,@hours*60,convert(datetime,'')),'') / 60 )
     + ':' + convert(varchar, datediff(minute,dateadd(minute,@hours*60,convert(datetime,'')),'') % 60 ) 

答案 3 :(得分:2)

WITH m AS
  SELECT Minutes = CAST(@hours * 60 AS int)
)
SELECT CAST(Minutes / 60 AS varchar) + ':' + RIGHT(100 + Minutes % 60, 2)
FROM m

答案 4 :(得分:-1)

select dateadd(MINUTE, cast((8.18 % 1) * 60 as int), dateadd(hour, cast(8.18 as int), convert(varchar(10), getdate(), 10)))