yyyymmdd yyyy tipo formato fecha example dato sql-server-2008 tsql type-conversion datediff

sql-server-2008 - tipo - sql date format dd/mm/yyyy



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

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

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: 2h

SELECT dbo.MinutesToDuration(147)

Resultados: 2h27m

¡Espero que esto ayude!

Tengo una consulta de selección que tiene la columna DURATION para calcular el número de minutos. Quiero convertir esos minutos al formato hh:mm .

La duración tiene valores como 60, 120,150

Por ejemplo:

60 se convierte en 01:00 horas

120 se convierte en 02:00 horas

150 se convierte en 02:30 horas

Además, así es como recupero la DURACIÓN ( Minutes )

DATEDIFF(minute, FirstDate,LastDate) as ''Duration (Minutes)''


Gracias a A Ghazal, justo lo que necesitaba. Aquí hay una versión ligeramente limpia de su respuesta:

create FUNCTION [dbo].[fnMinutesToDuration] ( @minutes int ) RETURNS nvarchar(30) -- Based on http://.com/questions/17733616/how-to-convert-number-of-minutes-to-hhmm-format-in-tsql AS BEGIN return rtrim(isnull(cast(nullif((@minutes / 60) , 0 ) as varchar ) + ''h '' ,'''' ) + isnull(CAST(nullif((@minutes % 60) ,0 ) AS VARCHAR(2) ) + ''m'' ,'''' ) ) end


Haría lo siguiente (copie y pegue todo el material a continuación en la ventana inmediata / ventana de consulta y ejecute)

select convert(varchar(5),dateadd(mi,DATEDIFF(minute, FirstDate,LastDate),''00:00''),114)

@foo almacena el valor que @foo en tu pregunta. El "truco" viene para entonces:
creamos una variable smalldatetime (en mi caso es el formato yyyy.mm.dd ) y la incrementamos con su valor int , luego mostramos (o almacenamos si lo desea) solo la parte de time .


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


Puede convertir la duración en 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 una menor precisión, modifique el tamaño de la varchar:

SELECT CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, @FirstDate, @LastDate), 0), 114) /* Results: 02:30 */


<code> CREATE function dbo.minutesToHHMM( @minutes int ) RETURNS varchar(10) as begin declare @hours int set @hours = (@minutes / 60) return format(@hours, '' 0'') + ''h'' + format (@minutes - @hours * 60, ''00'') + ''m'' end </code>


DECLARE @Duration int SET @Duration= 12540 /* for example big hour amount in minutes -> 209h */ SELECT CAST( CAST((@Duration) AS int) / 60 AS varchar) + '':'' + right(''0'' + CAST(CAST((@Duration) AS int) % 60 AS varchar(2)),2) /* you will get hours and minutes divided by : */


DECLARE @foo int DECLARE @unclefoo smalldatetime SET @foo = DATEDIFF(minute, CAST(''2013.01.01 00:00:00'' AS datetime),CAST(''2013.01.01 00:03:59'' AS datetime)) -- AS ''Duration (Minutes)'' SET @unclefoo = DATEADD(minute, @foo, ''2000.01.01'') SELECT CAST(@unclefoo AS time)

EX: seleccionar minutesToHHMM (1441) devuelve 24h1m