Usuário com melhor resposta
Exibir total de horas maior que 24 horas sql

Pergunta
-
Boa tarde!
Galera, provavelmente já deve existir este post mas não estou sabendo pesquisar.
Preciso retornar um total de horas, porém no formato hh:mm:ss por exemplo: 180:44:37
Porém quando faço o select com um tempo superior a 24 horas o valor fica semprede da faixa de 24 horas (até 23:59:59)
SELECT CONVERT(VARCHAR(8), DATEADD(SECOND,(456546465), '0:00:00'), 108)
Alguém sabe como resolver?
Obrigado.
Respostas
-
Boa Tarde,
Alguns links de referência:
Como realizar cálculos com horas no SQL Server – Parte I
http://gustavomaiaaguiar.wordpress.com/2009/04/03/como-realizar-calculos-com-horas-no-sql-server-%E2%80%93-parte-i/Como realizar cálculos com horas no SQL Server – Parte II
http://gustavomaiaaguiar.wordpress.com/2009/04/08/como-realizar-calculos-com-horas-no-sql-server-%e2%80%93-parte-ii/Como realizar cálculos com horas no SQL Server – Parte III
http://gustavomaiaaguiar.wordpress.com/2009/04/14/como-realizar-calculos-com-horas-no-sql-server-%e2%80%93-parte-iii/Como realizar cálculos com horas no SQL Server – Parte IV
http://gustavomaiaaguiar.wordpress.com/2009/04/19/como-realizar-calculos-com-horas-no-sql-server-%e2%80%93-parte-iv/Especificamente no seu caso, você terá que fazer alguns truques com essas funções de data. Eis um ponto de partida
DECLARE @D1 DATETIME, @D2 DATETIME
SET @D1 = '20120328 15:39'
SET @D2 = '20120402 15:38'SELECT
DATEDIFF(SS,@D1,@D2) / 3600 As Horas,
(DATEDIFF(SS,@D1,@D2) / 3600) % 60 As Minutos,
((DATEDIFF(SS,@D1,@D2) / 3600) % 60) % 60 As Segundos[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 2 de abril de 2012 19:41
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 8 de janeiro de 2018 12:22
-
Caros, bom dia!
Muito obrigado pela ajuda de todos.
Depois de dois dias de luta, cheguei a um resultado positivo.
Criei uma função que faz a montagem das horas no formato hh:mm:ss (ex.: 87:40:25)
Abaixo não coloquei a função, está apenas o select que retorna, agora é só adaptar para uma função.
DECLARE
@Segundos INT,
@Minutos INT,
@Horas INT,
@FormatarTempo VARCHAR(50)
SET @Segundos = 356400
SELECT
@Minutos = @Segundos/60,
@Horas = @Segundos/3600
SELECT
@Segundos = @Segundos - ((@Segundos/60) * 60),
@Minutos = @Minutos - ((@Minutos/60) * 60) -- Minutos
SELECT
@FormatarTempo =
REPLICATE('0', 2 - LEN(CAST(@Horas AS VARCHAR(30)))) +
CAST(@Horas AS VARCHAR(30)) + ':' + CASE WHEN @Minutos < 10 THEN '0' ELSE '' END +
CAST(@Minutos AS VARCHAR(30)) + ':' + CASE WHEN @Segundos < 10 THEN '0' ELSE '' END +
CAST(@Segundos AS VARCHAR(30))
SELECT @FormatarTempo
Obrigado a todos.- Marcado como Resposta Francisco R L Lima quarta-feira, 4 de abril de 2012 13:53
Todas as Respostas
-
Boa Tarde,
Alguns links de referência:
Como realizar cálculos com horas no SQL Server – Parte I
http://gustavomaiaaguiar.wordpress.com/2009/04/03/como-realizar-calculos-com-horas-no-sql-server-%E2%80%93-parte-i/Como realizar cálculos com horas no SQL Server – Parte II
http://gustavomaiaaguiar.wordpress.com/2009/04/08/como-realizar-calculos-com-horas-no-sql-server-%e2%80%93-parte-ii/Como realizar cálculos com horas no SQL Server – Parte III
http://gustavomaiaaguiar.wordpress.com/2009/04/14/como-realizar-calculos-com-horas-no-sql-server-%e2%80%93-parte-iii/Como realizar cálculos com horas no SQL Server – Parte IV
http://gustavomaiaaguiar.wordpress.com/2009/04/19/como-realizar-calculos-com-horas-no-sql-server-%e2%80%93-parte-iv/Especificamente no seu caso, você terá que fazer alguns truques com essas funções de data. Eis um ponto de partida
DECLARE @D1 DATETIME, @D2 DATETIME
SET @D1 = '20120328 15:39'
SET @D2 = '20120402 15:38'SELECT
DATEDIFF(SS,@D1,@D2) / 3600 As Horas,
(DATEDIFF(SS,@D1,@D2) / 3600) % 60 As Minutos,
((DATEDIFF(SS,@D1,@D2) / 3600) % 60) % 60 As Segundos[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 2 de abril de 2012 19:41
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 8 de janeiro de 2018 12:22
-
Francisco, boa tarde
segue uma forma de fazer o que você pede, baseado no que eu entendi do seu problema:
create table #LogTime(id int not null, data datetime not null default(getdate())) go insert into #LogTime values(1,(select getdate()-1)) insert into #LogTime values(1,(select getdate()-2)) insert into #LogTime values(1,(select getdate()-3)) insert into #LogTime values(2,(select getdate()-3)) insert into #LogTime values(3,(select getdate())) insert into #LogTime values(3,(select getdate())-1) go select id,SUM(datepart(HOUR,data)) from #LogTime group by id /*Total de horas passadas*/ select id, sum(DATEDIFF(hh,data,getdate()))[Total Hora] from #LogTime group by id
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Twitter @Olavooneto
Facebook Olavo Neto
Linkedin Olavo Neto
Se for útil marque como resposta e faça um Developer feliz :) -
Caros, bom dia!
Muito obrigado pela ajuda de todos.
Depois de dois dias de luta, cheguei a um resultado positivo.
Criei uma função que faz a montagem das horas no formato hh:mm:ss (ex.: 87:40:25)
Abaixo não coloquei a função, está apenas o select que retorna, agora é só adaptar para uma função.
DECLARE
@Segundos INT,
@Minutos INT,
@Horas INT,
@FormatarTempo VARCHAR(50)
SET @Segundos = 356400
SELECT
@Minutos = @Segundos/60,
@Horas = @Segundos/3600
SELECT
@Segundos = @Segundos - ((@Segundos/60) * 60),
@Minutos = @Minutos - ((@Minutos/60) * 60) -- Minutos
SELECT
@FormatarTempo =
REPLICATE('0', 2 - LEN(CAST(@Horas AS VARCHAR(30)))) +
CAST(@Horas AS VARCHAR(30)) + ':' + CASE WHEN @Minutos < 10 THEN '0' ELSE '' END +
CAST(@Minutos AS VARCHAR(30)) + ':' + CASE WHEN @Segundos < 10 THEN '0' ELSE '' END +
CAST(@Segundos AS VARCHAR(30))
SELECT @FormatarTempo
Obrigado a todos.- Marcado como Resposta Francisco R L Lima quarta-feira, 4 de abril de 2012 13:53
-
Uma outra forma de fazer essa conversão seria:
declare @tempo_em_segundos int = 259538 select cast(@tempo_em_segundos/3600 as varchar(3)) +':'+right('0'+cast(@tempo_em_segundos%3600/60 as varchar(2)) ,2) +':'+right('0'+cast(@tempo_em_segundos%60 as varchar(2)) ,2) --Resultado: '72:05:38'
Mais detalhes em: https://pt.stackoverflow.com/questions/267048/converter-varchar-para-time-em-sql-com-dados-com-mais-de-24-horas