Problém:
Máte dva sloupce typu datum a chcete vypočítat rozdíl mezi nimi.
Příklad:
V travel tabulka má tři sloupce:id , departure a arrival . Chcete vypočítat rozdíl mezi arrival a departure nebo počet dní od arrival včetně odjezdu.
travel tabulka vypadá takto:
| id | odjezd | příjezd |
|---|---|---|
| 1 | 25. 3. 2018 | 2018-04-05 |
| 2 | 2019-09-12 | 23. 9. 2019 |
| 3 | 2018-07-14 | 2018-07-14 |
| 4 | 2018-01-05 | 2018-01-08 |
Řešení:
SELECT id, departure, arrival, DATEDIFF(day, departure, arrival) AS date_difference, DATEDIFF(day, departure, arrival) + 1 AS days_inclusive FROM travel;
Výsledek je:
| id | odjezd | příjezd | rozdíl data | dny |
|---|---|---|---|---|
| 1 | 25. 3. 2018 | 2018-04-05 | 11 | 12 |
| 2 | 2019-09-12 | 23. 9. 2019 | 11 | 12 |
| 3 | 2018-07-14 | 2018-07-14 | 0 | 1 |
| 4 | 2018-01-05 | 2018-01-08 | 3 | 4 |
Diskuse:
Chcete-li zjistit rozdíl mezi daty, použijte DATEDIFF(datepart, startdate, enddate) funkce. datepart argument definuje část data/datetime, ve které chcete vyjádřit rozdíl. Jeho hodnota může být year , quarter , month , day , minute , atd. V tomto příkladu chcete vyjádřit rozdíl ve dnech, takže prvním argumentem je den. Další dva argumenty jsou datum, od kterého začnete počítat, a datum, kdy přestanete počítat – v tomto případě departure a arrival , respektive.
Ve většině případů skutečně chcete počet dní od prvního do druhého rande včetně . Poté je třeba k rozdílu ve dnech přičíst 1 den:DATEDIFF(day, departure, arrival) + 1 .