none
Obter tempo de permanência em intervalos de data/hora RRS feed

  • Pergunta

  • Caros,

    Bom dia.

    Estou com um problema e não encontro uma solução nativa do SQLServer 2008 R2 para resolvê-lo, preciso extrair o tempo de permanência de um chamado dentro de um intervalo de datas.

    Exemplo:

    Data de criação: 10/01/2013 08:32:06

    Data de alteração: 15/01/2013 12:03:10

    Preciso capturar o tempo de espera deste chamado em hora:minuto:segundo

    Alguma sugestão para alcançar o objetivo?

    Aguardo um retorno.

    Obrigado.

    André Geraldo dos Santos

    terça-feira, 15 de janeiro de 2013 14:06

Todas as Respostas

  • Boa tarde,

    Experimente fazer uns testes mais ou menos desta forma:

    select 
        CAST(DATEDIFF(SECOND, DataCriacao, DataAlteracao) / 3600 AS VARCHAR(9)) + ':' +
        RIGHT('0' + CAST(DATEDIFF(SECOND, DataCriacao, DataAlteracao) / 60 % 60 AS VARCHAR(2)), 2) + ':' +
        RIGHT('0' + CAST(DATEDIFF(SECOND, DataCriacao, DataAlteracao) % 60 % 60 AS VARCHAR(2)), 2) as Intervalo

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 15 de janeiro de 2013 16:24
  • André,

    Dados em datetime são, internamente, floats. Se você executar o código abaixo você obtera o datetime do tempo decorrido entre as datas a partir de 1/Jan/1900:

    declare @datainic datetime = '2013-01-22 20:30:00'
    declare @datafim datetime = '2013-01-23 09:57:07.430'
    select cast( (cast(@datafim as float) - cast(@datainic as float))  as datetime)

    O resultado é: 1900-01-01 13:27:07.430

    Se o período não exceder 24 horas, a query abaixo dá o tempo entre as datas:

    declare @datainic datetime = '2013-01-21 20:30:00'
    declare @datafim datetime = '2013-01-23 09:57:07.430'
    select convert(nchar(12), cast(cast(@datafim as float) - cast(@datainic as float)  as datetime),   114)
    

    O resultado é: 13:27:07:430

    Se passar de 24 horas, ai tem que fazer concatenação. A query fica assim: 

    declare @datainic datetime = '2012-11-14 13:42:00'
    declare @datafim datetime = '2013-01-23 09:57:07.430'
    select cast(DATEDIFF(HOUR, @datainic, @datafim) as nvarchar(max)) + right( convert(nchar(12), cast(cast(@datafim as float) - cast(@datainic as float)  as datetime),   114), 10)
    

    O resultado é: 1676:15:07:430

    Espero poder ter ajudado.

    []s,


    Armando Lacerda

    quarta-feira, 23 de janeiro de 2013 14:10