none
Afinar resultado RRS feed

  • Pregunta

  • Buenos días estimados/as.

    Tengo el siguiente resultado el cual me lo crea un procedimiento almacenado.

    El tema es que en la columna tiempo, no se está convirtiendo bien el formato, si son más de 59 minutos, debería ajustarse la hora y el resto de minutos. Acá la parte del SP donde quiero lograr esto.

    SET @SEC = DATEDIFF(SECOND, @VAR_HORA_INI, @VAR_HORA_TER);
    SET @VAR_PERIODO = '' + CONVERT(VARCHAR, @VAR_HORA_INI, 8) + ' - ' + CONVERT(VARCHAR, @VAR_HORA_TER, 8);
    SET @HORAS = CAST((@SEC / 3600) AS VARCHAR(20));
    SET @MinTemp = (@SEC % 3600) / 60;
    SET @MINUTOS = CAST(@MinTemp AS VARCHAR(20));

    Estoy bien así como lo tengo? 

    Muchas gracias a todos por su tiempo.

    Saludos.

    lunes, 8 de junio de 2020 14:50

Respuestas

  • Yo utilizo una funcion que me da HORAS, MINUTOS y SEGUNDOS

    CREATE FUNCTION calcularTiempo
        (
            @Date1 Datetime,
            @Date2 Datetime,
            @TYPE VARCHAR(MAX)  -- Forma en la que se va a transformar
        )                       -- 1: Formato String x horas x minutos x segundos
    
                                -- 2: Formato Number HH:MM:SS
        RETURNS VARCHAR(MAX)
        AS
        BEGIN
    	    DECLARE @temp VARCHAR(100)
            DECLARE @horas INT
            DECLARE @minutos INT
            DECLARE @tempMINUTOS INT
            DECLARE @segundos BIGINT
            SET @segundos = (
                SELECT
                    datediff(SECOND,@Date1, @Date2) AS Segundos
            )
    
            SET @temp ='...'
            IF (@segundos < 3600) BEGIN
                SET @minutos =  FLOOR(@minutos / 60)
                SET @segundos = @minutos % 60
                    --Según el tipo recibido lo formateo de una forma u otra
                    IF @TYPE = 1
                        SET @temp = '0 Horas ' + CONVERT(VARCHAR, @minutos) + ' Minutos ' + CONVERT(VARCHAR, @segundos) + ' Segundos'
                    ELSE
                        SET @temp = '00:' + CONVERT(VARCHAR, @minutos) + ':' +  CONVERT(VARCHAR, @segundos)
            END ELSE
        BEGIN
            SET @horas = FLOOR(@segundos / 3600)
            SET @tempMINUTOS = @segundos % 3600
            SET @minutos = FLOOR(@tempMINUTOS / 60) --MINUTOS FINALES
            SET @segundos = @tempMINUTOS % 60
                --Según el tipo recibido lo formateo de una forma u otra
                IF @TYPE = 1
                    SET @temp = CONVERT(VARCHAR, @horas) + ' Horas ' + CONVERT(VARCHAR, @minutos) + ' Minutos ' + CONVERT(VARCHAR, @segundos) + ' Segundos'
                ELSE
                    SET @temp = CONVERT(VARCHAR, @horas) + ':' + CONVERT(VARCHAR, @minutos) + ':' + CONVERT(VARCHAR, @segundos)
        END
            RETURN @temp
        END



    IIslas Master Consultant SQL Server

    • Marcado como respuesta Enrique Aleman lunes, 8 de junio de 2020 15:51
    lunes, 8 de junio de 2020 15:04

Todas las respuestas

  • Yo utilizo una funcion que me da HORAS, MINUTOS y SEGUNDOS

    CREATE FUNCTION calcularTiempo
        (
            @Date1 Datetime,
            @Date2 Datetime,
            @TYPE VARCHAR(MAX)  -- Forma en la que se va a transformar
        )                       -- 1: Formato String x horas x minutos x segundos
    
                                -- 2: Formato Number HH:MM:SS
        RETURNS VARCHAR(MAX)
        AS
        BEGIN
    	    DECLARE @temp VARCHAR(100)
            DECLARE @horas INT
            DECLARE @minutos INT
            DECLARE @tempMINUTOS INT
            DECLARE @segundos BIGINT
            SET @segundos = (
                SELECT
                    datediff(SECOND,@Date1, @Date2) AS Segundos
            )
    
            SET @temp ='...'
            IF (@segundos < 3600) BEGIN
                SET @minutos =  FLOOR(@minutos / 60)
                SET @segundos = @minutos % 60
                    --Según el tipo recibido lo formateo de una forma u otra
                    IF @TYPE = 1
                        SET @temp = '0 Horas ' + CONVERT(VARCHAR, @minutos) + ' Minutos ' + CONVERT(VARCHAR, @segundos) + ' Segundos'
                    ELSE
                        SET @temp = '00:' + CONVERT(VARCHAR, @minutos) + ':' +  CONVERT(VARCHAR, @segundos)
            END ELSE
        BEGIN
            SET @horas = FLOOR(@segundos / 3600)
            SET @tempMINUTOS = @segundos % 3600
            SET @minutos = FLOOR(@tempMINUTOS / 60) --MINUTOS FINALES
            SET @segundos = @tempMINUTOS % 60
                --Según el tipo recibido lo formateo de una forma u otra
                IF @TYPE = 1
                    SET @temp = CONVERT(VARCHAR, @horas) + ' Horas ' + CONVERT(VARCHAR, @minutos) + ' Minutos ' + CONVERT(VARCHAR, @segundos) + ' Segundos'
                ELSE
                    SET @temp = CONVERT(VARCHAR, @horas) + ':' + CONVERT(VARCHAR, @minutos) + ':' + CONVERT(VARCHAR, @segundos)
        END
            RETURN @temp
        END



    IIslas Master Consultant SQL Server

    • Marcado como respuesta Enrique Aleman lunes, 8 de junio de 2020 15:51
    lunes, 8 de junio de 2020 15:04
  • Muchas Gracias estimado. Fue de gran ayuda.
    lunes, 8 de junio de 2020 15:52
  • De nada, estamos para apoyarnos, feliz inicio de semana

    IIslas Master Consultant SQL Server

    lunes, 8 de junio de 2020 18:58
  • Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

    martes, 9 de junio de 2020 13:30
    Moderador