我需要将例如2.54的值转换为像hh:mm:ss这样的格式。 该值也可以为零。
答案 0 :(得分:0)
这是其中一个解决方案:
select
2.54 as NumericTime
,floor(2.54) as Minutes
,(2.54-floor(2.54))*100 as Seconds
,cast('00:'+cast(floor(2.54) as varchar)+':'
+cast((2.54-floor(2.54))*100 /* or 60 if this is common format */ as varchar) as time) as FullTime
但我真的不喜欢所有这些额外的CAST。也许有人可以提供更好的方式。
答案 1 :(得分:0)
您可以尝试这样
DECLARE @f DECIMAL = 2.54;
SELECT CONVERT(TIME(0), DATEADD(MINUTE, 60*@f, 0));
结果为
02:32:00
答案 2 :(得分:0)
我想我找到了,你怎么看?不是很优雅,但它的工作。
DECLARE @number DECIMAL(12,4) = 2.54
SELECT CASE
WHEN @number >= 60 THEN CONVERT(VARCHAR(50), FLOOR(FLOOR(@number) / 60)) + ':' + CONVERT(VARCHAR(10), (FLOOR(@number) % 60)) + ':' + CONVERT(VARCHAR(10), FLOOR((@number-floor(@number)) * 60))
ELSE '00:' + CONVERT(VARCHAR(50), FLOOR(@number)) + ':' + CONVERT(VARCHAR(50), FLOOR((@number - floor(@number)) * 60))
END
答案 3 :(得分:0)
试试这个:
DECLARE @Time DECIMAL(4,2) = 3.07
SELECT CAST(floor(@Time) AS VARCHAR) + ':'
+ REPLACE(REPLICATE('0',5 - LEN(CAST(@Time%1*100 AS VARCHAR)))
+ CAST(@Time%1*100 AS VARCHAR),'.',':');
这也将处理时间为2.05秒,4.09秒等的极端情况。
答案 4 :(得分:0)
试试这个
SELECT Convert(time(0),CONVERT(datetime, DATEADD(MINUTE, 60*@f, 0)));