Problem:
Du har två kolumner av datumtypen och du vill beräkna skillnaden mellan dem.
Exempel:
I travel tabell, det finns tre kolumner:id , departure och arrival . Du vill beräkna skillnaden mellan arrival och departure , eller antalet dagar från arrival till avgång inklusive.
travel tabellen ser ut så här:
| id | avgång | ankomst |
|---|---|---|
| 1 | 2018-03-25 | 2018-04-05 |
| 2 | 2019-09-12 | 2019-09-23 |
| 3 | 2018-07-14 | 2018-07-14 |
| 4 | 2018-01-05 | 2018-01-08 |
Lösning:
SELECT id, departure, arrival, DATEDIFF(day, departure, arrival) AS date_difference, DATEDIFF(day, departure, arrival) + 1 AS days_inclusive FROM travel;
Resultatet är:
| id | avgång | ankomst | date_difference | dagar |
|---|---|---|---|---|
| 1 | 2018-03-25 | 2018-04-05 | 11 | 12 |
| 2 | 2019-09-12 | 2019-09-23 | 11 | 12 |
| 3 | 2018-07-14 | 2018-07-14 | 0 | 1 |
| 4 | 2018-01-05 | 2018-01-08 | 3 | 4 |
Diskussion:
För att hitta skillnaden mellan datum, använd DATEDIFF(datepart, startdate, enddate) fungera. datepart argument definierar den del av datum/datumtid där du vill uttrycka skillnaden. Dess värde kan vara year , quarter , month , day , minute , etc. I det här exemplet vill du uttrycka skillnaden i dagar, så det första argumentet är dag. De två andra argumenten är datumet från vilket du börjar räkna och datumet när du slutar räkna – i det här fallet departure och arrival , respektive.
I de flesta fall är det du verkligen vill ha antalet dagar från det första datumet till det andra datumet inklusive . Sedan måste du lägga till 1 dag till skillnaden i dagar:DATEDIFF(day, departure, arrival) + 1 .