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 .