none
Calcular diferença de Horas? RRS feed

  • 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

    sexta-feira, 28 de abril de 2017 16:41

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
    sexta-feira, 28 de abril de 2017 18:05

Todas as Respostas

  • Cara, acho que você está equivocado.

    A diferença entre 05:10 e 07:00 é 01:50.

    O retorno está correto.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 28 de abril de 2017 17:31
  • desculpe já estou a tanto tempo nesse projeto que já fiquei tonto, mesmo assim o resultado desse código que esta ai é 02:50:00,

    já esta o código e eu com defeito. rssssss

     
    sexta-feira, 28 de abril de 2017 17:45
  • 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
    sexta-feira, 28 de abril de 2017 18:05
  • 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.

    sexta-feira, 28 de abril de 2017 18:27
  • Por nada!!

    Boa sorte nos estudos ai!

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 28 de abril de 2017 19:42