Usuário com melhor resposta
Calcular diferença de Horas?

Pergunta
-
pessoal fiz meu código e funciona quase certo, o problema que ele calcula errado certos horários, no código abaixo o resultado esperado seria 00:50:00 mais e resultado calculado é 01:50:00 porque isso acontece.
DECLARE @Quant_Horas varchar(5), @Ult_ID int, @Hora_Inicio time(7) = '05:10:00.0000000', @Hora_Final as time(7) = '07:00:00.0000000' --CALCULA A DIFERENÇA ENTRE HORAS SET @Quant_Horas = (select (DATEDIFF(second, @Hora_Inicio, @Hora_Final))) set @Quant_Horas = ISNULL (@Quant_Horas, '00:00:00') IF @Quant_Horas = 0 BEGIN SET @Quant_Horas = '00:00:00' END --CONVERTE PARA HORAS E MINUTOS SET @Quant_Horas = (RIGHT('00' + CONVERT(VARCHAR, DATEDIFF(HOUR, @Hora_Inicio, @Hora_Final) % 24), 2) + ':' + RIGHT('00' + CONVERT(VARCHAR, DATEDIFF(MINUTE, @Hora_Inicio, @Hora_Final) % 60), 2) + ':' + RIGHT('00' + CONVERT(VARCHAR, DATEDIFF(SECOND, @Hora_Inicio, @Hora_Final) % 60), 2)); SELECT @Quant_Horas AS RETORNO
Respostas
-
Tente dessa forma:
DECLARE @Quant_Horas varchar(8), @Ult_ID int, @Hora_Inicio time(7) = '05:10:00.0000000', @Hora_Final as time(7) = '07:00:00.0000000' --CALCULA A DIFERENÇA ENTRE HORAS SET @Quant_Horas = (select (DATEDIFF(second, @Hora_Inicio, @Hora_Final))) set @Quant_Horas = ISNULL (@Quant_Horas, '00:00:00') IF @Quant_Horas = 0 BEGIN SET @Quant_Horas = '00:00:00' END --CONVERTE PARA HORAS E MINUTOS SET @Quant_Horas = ISNULL(RIGHT(REPLICATE('0',2)+CAST((@Quant_Horas/3600) AS VARCHAR(8)),2)+':'+RIGHT(REPLICATE('0',2)+CAST((@Quant_Horas%3600)/60 AS VARCHAR(8)),2)+':'+RIGHT(REPLICATE('0',2)+CAST((@Quant_Horas%3600)%60 AS VARCHAR(8)),2),'00:00:00') SELECT @Quant_Horas AS RETORNO
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Marcado como Resposta Samuel de Jesus sexta-feira, 28 de abril de 2017 18:22
Todas as Respostas
-
-
-
Tente dessa forma:
DECLARE @Quant_Horas varchar(8), @Ult_ID int, @Hora_Inicio time(7) = '05:10:00.0000000', @Hora_Final as time(7) = '07:00:00.0000000' --CALCULA A DIFERENÇA ENTRE HORAS SET @Quant_Horas = (select (DATEDIFF(second, @Hora_Inicio, @Hora_Final))) set @Quant_Horas = ISNULL (@Quant_Horas, '00:00:00') IF @Quant_Horas = 0 BEGIN SET @Quant_Horas = '00:00:00' END --CONVERTE PARA HORAS E MINUTOS SET @Quant_Horas = ISNULL(RIGHT(REPLICATE('0',2)+CAST((@Quant_Horas/3600) AS VARCHAR(8)),2)+':'+RIGHT(REPLICATE('0',2)+CAST((@Quant_Horas%3600)/60 AS VARCHAR(8)),2)+':'+RIGHT(REPLICATE('0',2)+CAST((@Quant_Horas%3600)%60 AS VARCHAR(8)),2),'00:00:00') SELECT @Quant_Horas AS RETORNO
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Marcado como Resposta Samuel de Jesus sexta-feira, 28 de abril de 2017 18:22
-
VALEU GURI, ESSE É UM PROJETO PESSOAL SEM FINS LUCRATIVOS, TRABALHO NUMA EMPRESA COMO MOTORISTA E LEVA A RISCA HORÁRIOS, COMO SOU EU QUE PREENCHO MINHA FICHA DE TRABALHO LEVO ADVERTÊNCIA SE EXTRAPOLAR HORÁRIOS, ENTÃO RESOLVI FAZER ESSE PROJETO MAS TÁ DIFÍCIL CHEGAR NO FIM.
MAS VALEU SEU CÓDIGO DEU CERTO.
-