locked
convertir segundos a hora, minutos, segundos

    Question

  • Hola, hola a todos!! tengo una pregunta con referencia a trabajar con segundos:

    Tengo un campo int que almacena una cantidad "x" de segundos ejemplo: 

    declare @Tbl table (
    IdLlamada int,
    Llamada varchar(20),
    Duracion int
    )
    
    insert into @Tbl 
    values (1,'Maria', 12547)
    
    
    select * from @Tbl
    Donde la duración osea 12547 segundos tengo que pasarlo a hh:mm:ss.

    Cualquier ayuda seria bueno, si puedo hacerlo o encuentro la respuesta la publico

    Saludos a todos,

    Andy Peralta.
    Tuesday, October 06, 2009 5:12 AM

Answers

  • Hola.

    Una forma de hacerlo es sumarle los segundos con dateadd al 1 de Enero de 1900. Sería así:

    declare @s int

    select @s = 12547

    select convert(char(8), dateadd(ss, @s, '19000101'), 114)


    Luego lo conviertes a char(8), formato 114, para obtener una cadena hh:mm::ss, en este caso 03:29:07, 12547 segundos. Si no te vale, nos dices.



    Alberto López Grande.
    Tuesday, October 06, 2009 7:15 AM
  • Otra forma es usando los operadores de division y/o modulo en dependencia del elemento a calcular.


    DECLARE @duracion int;
    DECLARE @current_dt datetime;
    
    SET @current_dt = GETDATE();
    SET @duracion = DATEDIFF([second], CONVERT(char(8), @current_dt, 112), @current_dt);
    
    SELECT
    	@duracion / (60 * 60) AS [hor],
    	(@duracion % (60 * 60) / 60) AS [min],
    	(@duracion % (60 * 60) % 60) AS [seg],
    	@current_dt;
    GO


    AMB
    • Marked as answer by T.ControL Wednesday, October 07, 2009 12:44 AM
    Tuesday, October 06, 2009 1:12 PM
  • Ambas funcionaron,  pero la primera despues de 24 horas cambia a dias por lo tanto tiene que ser de la siguiente manera:

    declare @s int
    
    select @s = 123370
    
    select substring(convert( varchar, dateadd(ss, @s, '19000101'),120),9,11) as Tiempo

    Que daria como resultado: 

    Día,Hora,Minutos,Segundos
    02 10:16:10

    gracias a todos!!
    • Marked as answer by T.ControL Wednesday, October 07, 2009 12:44 AM
    Wednesday, October 07, 2009 12:44 AM

All replies

  • Hola.

    Una forma de hacerlo es sumarle los segundos con dateadd al 1 de Enero de 1900. Sería así:

    declare @s int

    select @s = 12547

    select convert(char(8), dateadd(ss, @s, '19000101'), 114)


    Luego lo conviertes a char(8), formato 114, para obtener una cadena hh:mm::ss, en este caso 03:29:07, 12547 segundos. Si no te vale, nos dices.



    Alberto López Grande.
    Tuesday, October 06, 2009 7:15 AM
  • Otra forma es usando los operadores de division y/o modulo en dependencia del elemento a calcular.


    DECLARE @duracion int;
    DECLARE @current_dt datetime;
    
    SET @current_dt = GETDATE();
    SET @duracion = DATEDIFF([second], CONVERT(char(8), @current_dt, 112), @current_dt);
    
    SELECT
    	@duracion / (60 * 60) AS [hor],
    	(@duracion % (60 * 60) / 60) AS [min],
    	(@duracion % (60 * 60) % 60) AS [seg],
    	@current_dt;
    GO


    AMB
    • Marked as answer by T.ControL Wednesday, October 07, 2009 12:44 AM
    Tuesday, October 06, 2009 1:12 PM
  • Ambas funcionaron,  pero la primera despues de 24 horas cambia a dias por lo tanto tiene que ser de la siguiente manera:

    declare @s int
    
    select @s = 123370
    
    select substring(convert( varchar, dateadd(ss, @s, '19000101'),120),9,11) as Tiempo

    Que daria como resultado: 

    Día,Hora,Minutos,Segundos
    02 10:16:10

    gracias a todos!!
    • Marked as answer by T.ControL Wednesday, October 07, 2009 12:44 AM
    Wednesday, October 07, 2009 12:44 AM