Usuário com melhor resposta
Cálculo de tempo de execução

Pergunta
-
tenho uma tabela simples onde atualizo a data de atualização de algumas rotinas criadas no SSIS, com a seguinte estrutura:
CREATE TABLE [u2628].[Tbl_StatusSistema](
[id] [smallint] IDENTITY(1,1) NOT NULL,
[subSistema] [varchar](100) NOT NULL,
[nomeTabela] [varchar](200) NOT NULL,
[dataAtualizacao] [date] NOT NULL,
[dataInclusao] [datetime] NULL,
[dataInicioAtualizacao] [datetime] NULL,
[dataFimAtualizacao] [datetime] NULL)
Gostaria de incluir nessa tabela um campo calculado (duracao) onde ele mostrasse o tempo total de execução das rotinas, usando os campos dataInicioAtualizacao e dataFimAtualizacao.
A ideia é ele mostrar algo assim: 1d 14h 38m 14s 560ms
Tentei de várias formas calcular precisamente o tempo mas, não consegui....
Minha primeira tentativa mostra o tempo mas, os campos acumulam o tempo... ou seja, se a rotina demorou 40 horas, o campo mostra 1 d 40h 2400m ....
Alguém fez algo parecido...??
[duracao] AS (case when isnull(datediff(second,[dataInicioAtualizacao],[dataFimAtualizacao]),(0))>=(0) then ((((((((CONVERT([varchar](20),isnull(datediff(day,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0)+'d ')+CONVERT([varchar](20),isnull(datediff(hour,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'h ')+CONVERT([varchar](20),isnull(datediff(minute,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'m ')+CONVERT([varchar](20),isnull(datediff(second,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'s ')+CONVERT([varchar](20),isnull(datediff(millisecond,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'ms ' end),
Respostas
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 2 de fevereiro de 2018 10:55
- Marcado como Resposta Thiago Serra sexta-feira, 2 de fevereiro de 2018 19:22
Todas as Respostas
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 2 de fevereiro de 2018 10:55
- Marcado como Resposta Thiago Serra sexta-feira, 2 de fevereiro de 2018 19:22
-
Valeu José!
Abaixo o código para o campo:
alter table [u2628].[Tbl_StatusSistema] add [duracao] AS ( case when isnull(datediff(second, dataInicioAtualizacao, dataFimAtualizacao),0)>=0 then convert(varchar(20), (datediff(second, dataInicioAtualizacao, dataFimAtualizacao) / 86400)) + 'd ' + convert(varchar(20), ((datediff(second, dataInicioAtualizacao, dataFimAtualizacao) % 86400) / 3600)) + 'h ' + convert(varchar(20), ((datediff(second, dataInicioAtualizacao, dataFimAtualizacao) % 3600) / 60)) + 'm ' + convert(varchar(20), (datediff(second, dataInicioAtualizacao, dataFimAtualizacao) % 60)) + 's' end )
-