Some old time data stored as float needs to be converted into time fields. So, given the table:
CREATE TABLE #T (TVALUE FLOAT(8), EXPECTED_TVALUE TIME);
INSERT INTO #T (TVALUE, EXPECTED_TVALUE) VALUES (0, null), (9.474, '09:47:40'), (11.3015, '11:30:15'), (1.0, '01:00:00'), (13, '13:00:00');
Is it possible to write a statement that for all these possible values the desired outcome is achieved?
I came up with some parts of it but none is valid or leads me to a correct working statement:
SELECT TVALUE, EXPECTED_TVALUE, FORMAT(FLOOR(TVALUE) * 10000 + (TVALUE - FLOOR(TVALUE)) * 60 + (TVALUE - FLOOR(TVALUE)) * 60, '00:00:00') AS TMP_TVALUE FROM #T
SELECT TVALUE, EXPECTED_TVALUE, CAST(CONVERT(VARCHAR,DATEADD(SECOND, TVALUE * 3600, 0),108) AS TIME) AS TMP_TVALUE FROM #T
SELECT TVALUE, EXPECTED_TVALUE, FORMAT(TVALUE, '00:00:00') as TMP_TVALUE FROM #T
I’d rather not use functions or procedures since it must be part of a (much) larger migration script.