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