是否有一种简单的方法可以在Ms SQL Server 2008中以小时为单位格式化浮点数?
示例:
非常感谢。
答案 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)))