105 votes

Comment convertir les secondes en HH:MM:SS en utilisant T-SQL

La situation est que vous avez une valeur en secondes (XXX.XX), et vous voulez la convertir en HH:MM:SS en utilisant T-SQL.

Exemple :

  • 121.25 s devient 00:02:01.25

171voto

great_llama Points 5836

Vous voulez multiplier jusqu'aux millisecondes car la partie fractionnaire est ignorée.

SELECT DATEADD(ms, 121.25 * 1000, 0)

Si vous voulez sans la partie date, vous pouvez utiliser CONVERT, avec le style 114

SELECT CONVERT(varchar, DATEADD(ms, 121.25 * 1000, 0), 114)

61voto

jim31415 Points 2884

Si votre durée dépasse 24 heures, elle ne sera pas gérée correctement avec les méthodes DATEADD et CONVERT.

SELECT CONVERT(varchar, DATEADD(ms, 24*60*60 * 1000, 0), 114)
00:00:00:000

La fonction suivante gérera les durées dépassant 24 heures (~max 35 791 394 heures).

create function [dbo].[ConvertTimeToHHMMSS]
(
    @time decimal(28,3), 
    @unit varchar(20)
)
returns varchar(20)
as
begin

    declare @seconds decimal(18,3), @minutes int, @hours int;

    if(@unit = 'hour' or @unit = 'hh' )
        set @seconds = @time * 60 * 60;
    else if(@unit = 'minute' or @unit = 'mi' or @unit = 'n')
        set @seconds = @time * 60;
    else if(@unit = 'second' or @unit = 'ss' or @unit = 's')
        set @seconds = @time;
    else set @seconds = 0; -- unités de temps inconnues

    set @hours = convert(int, @seconds /60 / 60);
    set @minutes = convert(int, (@seconds / 60) - (@hours * 60 ));
    set @seconds = @seconds % 60;

    return 
        convert(varchar(9), convert(int, @hours)) + ':' +
        right('00' + convert(varchar(2), convert(int, @minutes)), 2) + ':' +
        right('00' + convert(varchar(6), @seconds), 6)

end

Utilisation :

select dbo.ConvertTimeToHHMMSS(123, 's')
select dbo.ConvertTimeToHHMMSS(96.999, 'mi')
select dbo.ConvertTimeToHHMMSS(35791394.999, 'hh')
0:02:03.000
1:36:59.940
35791394:59:56.400

32voto

BrettC Points 301

Pour ceux qui rencontrent des problèmes avec l'utilisation de DATEADD et CONVERT pour des secondes dépassant 24 heures, nous pouvons utiliser le modulo pour contourner cela :

SELECT CONVERT(varchar, @seconds / 86400 ) + ':' + -- Jours
CONVERT(varchar, DATEADD(ms, ( @seconds % 86400 ) * 1000, 0), 114)
as "Converti en J:HH:MM:SS.MS"

29voto

cmd.prompt Points 224
DÉCLARER @seconds EN tant que int = 896434;
SÉLECTIONNER
    CONVERT(varchar, (@seconds / 86400))                --Jours
    + ':' +
    CONVERT(varchar, DATEADD(ss, @seconds, 0), 108);    --Heures, Minutes, Secondes

Résultats:

10:09:00:34

16voto

En utilisant SQL Server 2008

déclarer @Seconds en tant que int = 3600;
SELECT CONVERT(time(0), DATEADD(SECOND, @Seconds, 0)) as 'hh:mm:ss'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X