Konvertieren Sie Dezimalminuten zu hh: mm: ss

Ich muss einen Wert umsetzen, zB 2.54, der in Minuten zu einem Format wie hh: mm: ss kommt. der Wert könnte auch Null sein.

Du kannst so versuchen

DECLARE @f DECIMAL = 2.54; SELECT CONVERT(TIME(0), DATEADD(MINUTE, 60*@f, 0)); 

Ergibt sich als

 02:32:00 

Dies ist eine der Lösungen:

 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 

Aber das gefällt mir nicht alle diese zusätzlichen CASTs. Vielleicht kann jemand einen besseren path bieten.

Ich glaube, ich habe es gefunden, was denkst du? nicht sehr elegant, aber es ist Arbeit.

 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 

Versuche dies:

 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),'.',':'); 

Dies wird auch die Ecke Fälle behandeln, wo die time 2,05 Sek., 4,09 Sek. Usw. ist.

Versuche dies

 SELECT Convert(time(0),CONVERT(datetime, DATEADD(MINUTE, 60*@f, 0)));