Usuário com melhor resposta
Ajuda com calculos de atendimento

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.0000000Eu 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?
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
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 -
-
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
-
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.
- Editado Paulo.Sérgio terça-feira, 22 de maio de 2012 17:50