Database
 sql >> Base de Dados >  >> RDS >> Database

Como calcular a diferença entre duas datas em T-SQL

Problema:


Você tem duas colunas do tipo data e deseja calcular a diferença entre elas.

Exemplo:


Na travel tabela, há três colunas:id , departure , e arrival . Você gostaria de calcular a diferença entre arrival e departure , ou o número de dias de arrival à partida inclusive.

A travel tabela fica assim:
id partida chegada
1 25-03-2018 2018-04-05
2 2019-09-12 23-09-2019
3 2018-07-14 2018-07-14
4 2018-01-05 2018-01-08

Solução:

SELECT
  id,
  departure,
  arrival,
  DATEDIFF(day, departure, arrival) AS date_difference,
  DATEDIFF(day, departure, arrival) + 1 AS days_inclusive
FROM travel;

O resultado é:
id partida chegada date_difference dias
1 25-03-2018 2018-04-05 11 12
2 2019-09-12 23-09-2019 11 12
3 2018-07-14 2018-07-14 0 1
4 2018-01-05 2018-01-08 3 4

Discussão:


Para encontrar a diferença entre as datas, use o DATEDIFF(datepart, startdate, enddate) função. O datepart O argumento define a parte da data/datahora na qual você gostaria de expressar a diferença. Seu valor pode ser year , quarter , month , day , minute , etc. Neste exemplo, você deseja expressar a diferença em dias, portanto, o primeiro argumento é dia. Os outros dois argumentos são a data em que você começa a contar e a data em que você para de contar – Neste caso, departure e arrival , respectivamente.

Na maioria dos casos, o que você realmente quer é o número de dias entre a primeira e a segunda data inclusive . Então você precisa adicionar 1 dia à diferença em dias:DATEDIFF(day, departure, arrival) + 1 .