Como calcular a diferença entre duas datas no SQL Server

Salve pessoal!

Situação problema deste post

Como calcular a diferença entre duas datas usando Transact-SQL, considerando o mês e o dia das datas envolvidas?

Usando o DATEDIFFa variação de dias é desconsiderada:

E o DATEDIFF também não considera o mês para fazer a diferença:

Somente com o DATEDIFF, portanto, não conseguimos resolver. Esta faz uma subtração dos valores absolutas dos anos das datas, logo, não resolve nosso problema.

Demonstro, a seguir, duas soluções:

  1. Na primeira calculo a diferença em anos entre duas datas (idade) considerando, é claro, o dia do “aniversário” da data comparada.

2. Na segunda calculo e apresento esta diferença em anos, meses e dias destas duas datas.

Calculando a diferença entre duas datas em anos

Para ajustar o calculo da idade em anos, na função Fc_Calcula_Idade é somado -1 caso o mês de início seja igual OU maior que o mês da data final E se o mês for igual, compara-se o dia também.

Testando…

T-SQL – Função [Fc_Calcula_Idade]

Perfeito! Primeira proposta de solução concluída.

Calculando a diferença entre duas datas em anos, mês e dia

Vamos complicar um pouquinho!

Para calcular e apresentar anos, mês e dia resolvi da seguinte forma:

  1. A data do aniversário mais recente, para isso preciso calcular o ano deste aniversário ( @int_Ano_Ultimo_Aniversario ).

A diferença em anos: @int_Qtd_Anos.

A quantidade de meses, desde de o último aniversário:

O último mesversário ( @dt_Ultimo_Mesversario ) para conclui a diferença em dias: @int_Qtd_Dias.

Concateno os valores que serão retornados como VARCHAR.

Testando…

Perfeito!

Já com tratamentos para o mês de fevereiro e os meses de 31 dias. Penso que esta função atenda em vários cenários.

Essas funções têm me atendido em algumas demandas.

Espero que sejam úteis e no seu dia-a-dia e no seu aprendizado.

Estejam a vontade em comentar e compartilhar.


Grande abraço, até a próxima.

2 thoughts on “Como calcular a diferença entre duas datas no SQL Server

  1. Bom dia Professor, excelente artigo.

    Mas tem erro ( provavelmente no meu codigo ).

    Copiei exatamente o seu codigo acima e quando excecutei minha consulta, deu um valor errado.

    dbo.fc_calcula_Idade_Completa(convert(date,c.Dataadmissao,103), convert(date,c.datademissao,103)) as ‘Tempo’

    Admissao: 02/10/2015 Demissao: 08/05/2023 Temmpo: 7 anos, 6 meses e 36 dias

    Não deveria ser 7 anos, 7 meses e 6 ou 5 dias ( depednendo se for mes com 30 ou com 31?

    Obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *