Saltar al contenido

¿Cómo convertir el número de minutos al formato hh: mm en TSQL?

Solución:

Puede convertir la duración a una fecha y luego formatearla:

DECLARE
    @FirstDate datetime,
    @LastDate datetime

SELECT
    @FirstDate="2000-01-01 09:00:00",
    @LastDate="2000-01-01 11:30:00"

SELECT CONVERT(varchar(12), 
       DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) 

/* Results: 02:30:00:000 */

Para menos precisión, modifique el tamaño del varchar:

SELECT CONVERT(varchar(5), 
       DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) 

/* Results: 02:30 */

Esta función es para convertir la duración en minutos a un formato legible de horas y minutos. es decir, 2h30m. Elimina las horas si la duración es inferior a una hora, y muestra solo las horas si la duración en horas sin minutos extra.

CREATE FUNCTION [dbo].[MinutesToDuration]
(
    @minutes int 
)
RETURNS nvarchar(30)

AS
BEGIN
declare @hours  nvarchar(20)

SET @hours = 
    CASE WHEN @minutes >= 60 THEN
        (SELECT CAST((@minutes / 60) AS VARCHAR(2)) + 'h' +  
                CASE WHEN (@minutes % 60) > 0 THEN
                    CAST((@minutes % 60) AS VARCHAR(2)) + 'm'
                ELSE
                    ''
                END)
    ELSE 
        CAST((@minutes % 60) AS VARCHAR(2)) + 'm'
    END

return @hours
END

Para utilizar esta función:

SELECT dbo.MinutesToDuration(23)

Resultados: 23m

SELECT dbo.MinutesToDuration(120)

Resultados: 2 h

SELECT dbo.MinutesToDuration(147)

Resultados: 2h27m

¡Espero que esto ayude!

No estoy seguro de que estas sean las mejores opciones, pero definitivamente harán el trabajo:

declare @durations table
(
    Duration int
)

Insert into @durations(Duration)
values(60),(80),(90),(150),(180),(1000)

--Option 1 - Manually concatenate the values together
select right('0' + convert(varchar,Duration / 60),2) + ':' + right('0' + convert(varchar,Duration % 60),2)
from @Durations

--Option 2 - Make use of the time variable available since SQL Server 2008
select left(convert(time,DATEADD(minute,Duration,0)),5)
from @durations

GO
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *