Jump to content
Sign in to follow this  
asacap1000

Converter Minutos em horas e minutos

Recommended Posts

Galera preciso de uma ajuda,

Estou acostumado com as regras no Oracle mas no SQl achei que não mudava tanto.

 

Estou com um campo em uma tabela que grava as horas em Minutos atingindo seus 1440 minutos por dia. Como eu faria para converter este valor em hh:mm?

 

 

Share this post


Link to post
Share on other sites

+/- isso:

 

 

declare @minutos int
set @minutos = 2780
 
select cast (@minutos / 60 as varchar) + ':' + cast (@minutos - ((@minutos / 60) * 60) as varchar)
 

ah, achei:

 

 

if exists (select 1 from sys.objects where name = 'FN_HORA' and type ='FN')
DROP FUNCTION FN_HORA
GO
 
CREATE FUNCTION FN_HORA (@TEMPO INT)
 
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @HORARIO VARCHAR(20)
 
DECLARE @HORA    INT
DECLARE @MINUTO  INT
DECLARE @SEGUNDO INT
 
SET @HORA    = (@TEMPO/3600)
SET @MINUTO  = (@TEMPO%3600) / 60
SET @SEGUNDO = (@TEMPO%3600) % 60
 
 
SELECT @HORARIO =
    CASE WHEN @TEMPO/3600 >= 1 THEN
 
        CASE LEN(CAST((@HORA)        AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END
      + CAST ((@HORA) AS VARCHAR) + ':'
 
      + CASE LEN(CAST((@MINUTO)        AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END
      + CAST((@MINUTO) AS VARCHAR) +  ':'
 
      + CASE LEN(CAST((@SEGUNDO)    AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END
      + CAST((@SEGUNDO) AS VARCHAR)
 
    ELSE
        CASE LEN(CAST((@MINUTO)        AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END
      + CAST((@MINUTO) AS VARCHAR) +  ':'
 
      + CASE LEN(CAST((@SEGUNDO)    AS VARCHAR)) WHEN 1 THEN '0' ELSE '' END
      + CAST((@SEGUNDO) AS VARCHAR)
    END
 
RETURN(@HORARIO)
END
GO
 
-- select dbo.FN_HORA(1440)
 
  • +1 1

Share this post


Link to post
Share on other sites

 

"Estou com um campo em uma tabela que grava as horas em Minutos atingindo seus 1440 minutos por dia. Como eu faria para converter este valor em hh:mm?"

 

--

Uma forma simples é

-- código 1
SELECT MinutosD, 
       Convert(char(5), DateAdd(minute, MinutosD, 0), 108) as HHMM
  from Tab;

onde MinutosD é o nome da coluna que contém o acumulado em minutos e Tab é o nome da tabela.

Observe que é uma solução simples mas que funciona para valores de MinutosD menores do que 1440. Afinal, 1440 são 24 horas, que é o mesmo que 1 dia. Expressões horárias armazenam até 23 horas ou 59 minutos ou 59 segundos. Não é correto representar 24:00 ou ainda 23:60, pois é considerado 1d 0h 00min, onde d é abreviatura de dia.

 

Mas se o valor da coluna MinutosD pode atingir 1440, ou mesmo ultrapassar este valor, pode-se utilizar outra forma que retorna horas acumuladas, sem respeitar a regra 23:59:59:

-- código 2
SELECT MinutosD, 
       Cast( Floor(MinutosD / 60) as varchar) + ':' +
            Right('00' + Cast( Floor((MinutosD % 60)) as varchar), 2) as HHMM
  from Tab;

----

linkedin.gif José Diz Belo Horizonte, MG - Brasil

----

Edited by JoseDR

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.