将小数分钟转换为hh:mm:ss

时间:2014-05-30 14:00:13

标签: sql-server sql-server-2008

我需要将例如2.54的值转换为像hh:mm:ss这样的格式。 该值也可以为零。

5 个答案:

答案 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)));