Jump to content

Archived

This topic is now archived and is closed to further replies.

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)
 

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

----

Share this post


Link to post
Share on other sites

×

Important Information

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