Função SQL que formata MINUTOS em HORAS

Basta executar a função abaixo:
CREATE FUNCTION FN_MINUTO_HORA (@Minutos INT)
RETURNS NVARCHAR(7)
BEGIN
DECLARE @vHoras INTEGER, @vMinutos INTEGER, @HoraFormatada VARCHAR(7)

SET @vHoras = CAST(ROUND(@Minutos / 60, 0) AS INT)
SET @vMinutos = @Minutos % 60

SET @HoraFormatada = CASE LEN(@vHoras)
WHEN 0 THEN '00'
WHEN 1 THEN '0' + CONVERT(NVARCHAR(1), @vHoras)
ELSE CONVERT(NVARCHAR(4),@vHoras)
END

SET @HoraFormatada = @HoraFormatada + ':' +
CASE LEN(@vMinutos)
WHEN 0 THEN '00'
WHEN 1 THEN '0' + CONVERT(NVARCHAR(3), @vMinutos)
ELSE CONVERT(NVARCHAR(4), @vMinutos)
END

RETURN @HoraFormatada
END
Caso você tenha o banco de dados Oracle, a função SQL é esta aqui em baixo:
create or replace FUNCTION FN_MINUTO_HORA (p_Minutos IN NUMBER)
RETURN VARCHAR2
IS
vHoras varchar2(9);
vMinutos varchar2(9);
HoraFormatada VARCHAR2(9);
BEGIN

vHoras := TRUNC(p_Minutos / 60); -- Divide os minutos por 60 para obter as horas
vMinutos := MOD(p_Minutos, 60); -- O restante são os minutos

IF LENGTH(REPLACE(vHoras,'-')) >= 3 THEN

HoraFormatada := REPLACE(TO_CHAR(vHoras,'000'),'-') || ':' || TRIM(LPAD(REPLACE(vMinutos,'-'), 2, '0'));
ELSE

HoraFormatada := REPLACE(TO_CHAR(vHoras,'00'),'-') || ':' || TRIM(LPAD(REPLACE(vMinutos,'-'), 2, '0'));
END IF;

IF vMinutos < 0 THEN

HoraFormatada := TO_CHAR( '-' || TRIM(HoraFormatada));

ELSE HoraFormatada := TRIM(TO_CHAR(HoraFormatada));

END IF;

RETURN HoraFormatada;
END;
Para executar basta, fazer assim:
SELECT dbo.FN_MINUTO_HORA(14251)
Gostou da dica, comente e compartilhe

0 Comentários