none
Ajuda com calculos de atendimento RRS feed

  • Pergunta

  • Bom dia, faz algum tempo que estou tendo uma dificuldade de criar um tempo de atendimento, poderiam por favor me ajudarem?

    Tenho o seguinte select:

    SELECT [DataInicio]
          ,[HoraInicio]
          ,[DataResolucao]
          ,[HoraResolucao]
    FROM [ASPNETDB].[dbo].[ChamadosEmAberto_Alarmes_Estatisticas]
    Nisso eles me trazem os seguintes dados

    DataInicio       HoraInicio                 DataResolucao    HoraResolucao
    2010-07-14    14:10:00.0000000    2010-07-14         14:20:00.0000000
    2010-07-14    14:10:00.0000000    2010-07-15         14:20:00.0000000

    Eu gostaria de ter uma quinta coluna denominada "Tempo_Execução".

    Ou seja, no primeiro caso começou em 14/07 as 14:10:00 e terminou no dia 14/07 as 14:20, sendo assim o tempo_Execução= 00:10:00 (ou seja, tempo total de 10 minutos).

    No segundo cálculo é:

    14/07 14:10 até 15/07 14:20, ou seja, tempo_execução= 24:10 (ou seja, 24 horas e 10 minutos).

    Poderiam por favor, me da uma ajuda?

    terça-feira, 22 de maio de 2012 14:46

Respostas

  • Olá Paulo,

    com estes dados acredito que esta seja a melhor forma

    CREATE TABLE #TEMP(
    DataInicio DATE,
    HoraInicio TIME(7),
    DataResolucao DATE,
    HoraResolucao TIME(7))
    
    INSERT INTO #TEMP VALUES('2010-07-14','14:10:00.0000000', '2010-07-14','14:20:00.0000000')
     ,('2010-07-14','14:10:00.0000000','2010-07-15','14:20:00.0000000')
    
    
    
    SELECT RIGHT('0' + CAST(DATEDIFF(DAY,DataInicio,DataResolucao) * 24  + CONVERT(int, DATEDIFF(MINUTE,HoraInicio,HoraResolucao) / 60) AS VARCHAR),2) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,HoraInicio,HoraResolucao) % 60) + 100), 2)
    FROM #TEMP


    Att.
    Lukas Baldan

    • Marcado como Resposta Paulo.Sérgio terça-feira, 22 de maio de 2012 17:45
    terça-feira, 22 de maio de 2012 16:44

Todas as Respostas

  • Paulo,

    qual o tipo de dados dos campos???

    Veja se isto te ajuda

    CREATE TABLE #TEMP(
    DataInicio varchar(10),
    HoraInicio varchar(16),
    DataResolucao varchar(10),
    HoraResolucao varchar(16))
    
    INSERT INTO #TEMP VALUES('2010-07-14','14:10:00.0000000', '2010-07-14','14:20:00.0000000')
     ,('2010-07-14','14:10:00.0000000','2010-07-15','14:20:00.0000000')
    
    SELECT DATEDIFF(MINUTE,DataInicio + ' ' +  SUBSTRING([HoraInicio],1,8),[DataResolucao] + ' ' + SUBSTRING([HoraResolução],1,8))
    FROM #TEMP
    
    SELECT (RIGHT('0' + CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,DataInicio + ' ' +  SUBSTRING([HoraInicio],1,8),[DataResolucao] + ' ' + SUBSTRING([HoraResolução],1,8)) / 60)),2) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,DataInicio + ' ' +  SUBSTRING([HoraInicio],1,8),[DataResolucao] + ' ' + SUBSTRING([HoraResolução],1,8)) % 60) + 100), 2) )
    FROM #TEMP


    Att.
    Lukas Baldan

    terça-feira, 22 de maio de 2012 15:47
  • Lukas, tudo bem?

    Os tipos de dados são esses:

    Datainicio/Dataresolucao = Date

    HoraInicio/HoraResolucao = time(7)

    Vou olhar seu select para entender, muito obrigado pela contribuição.

    terça-feira, 22 de maio de 2012 16:13
  • Olá Paulo,

    com estes dados acredito que esta seja a melhor forma

    CREATE TABLE #TEMP(
    DataInicio DATE,
    HoraInicio TIME(7),
    DataResolucao DATE,
    HoraResolucao TIME(7))
    
    INSERT INTO #TEMP VALUES('2010-07-14','14:10:00.0000000', '2010-07-14','14:20:00.0000000')
     ,('2010-07-14','14:10:00.0000000','2010-07-15','14:20:00.0000000')
    
    
    
    SELECT RIGHT('0' + CAST(DATEDIFF(DAY,DataInicio,DataResolucao) * 24  + CONVERT(int, DATEDIFF(MINUTE,HoraInicio,HoraResolucao) / 60) AS VARCHAR),2) + ':' + RIGHT(CONVERT(VARCHAR, CONVERT(int, DATEDIFF(MINUTE,HoraInicio,HoraResolucao) % 60) + 100), 2)
    FROM #TEMP


    Att.
    Lukas Baldan

    • Marcado como Resposta Paulo.Sérgio terça-feira, 22 de maio de 2012 17:45
    terça-feira, 22 de maio de 2012 16:44
  • Lukas, eu fiz um pouquinho diferente:

    Criei uma função:

    CREATE function [dbo].[Calcular_Horas] (@Start Datetime, @End   Datetime)
    Returns Varchar(13)
    Begin
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)
    
    
    
    Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60
           
    
    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                               Case When Len(@Min)=1 Then '0' +@Min + ':00'  Else @Min + ':00' End ) 
    End
    GO


    Assim, ele me retorna em horas + minutos + segundos.

    Muito obrigado pela atenção!

    Ps:. Talvez alguém possa melhorar a função, deixando-a melhor.

    terça-feira, 22 de maio de 2012 17:47