Problem:
Masz dwie kolumny typu daty i chcesz obliczyć różnicę między nimi.
Przykład:
W travel tabeli, są trzy kolumny:id , departure i arrival . Chcesz obliczyć różnicę między arrival i departure lub liczba dni od arrival do wyjazdu włącznie.
travel tabela wygląda tak:
| id | wyjazd | przybycie |
|---|---|---|
| 1 | 2018-03-25 | 2018-04-05 |
| 2 | 2019-09-12 | 23-09-2019 |
| 3 | 2018-07-14 | 2018-07-14 |
| 4 | 2018-01-05 | 2018-01-08 |
Rozwiązanie:
SELECT id, departure, arrival, DATEDIFF(day, departure, arrival) AS date_difference, DATEDIFF(day, departure, arrival) + 1 AS days_inclusive FROM travel;
Wynik:
| id | wyjazd | przybycie | date_difference | dni |
|---|---|---|---|---|
| 1 | 2018-03-25 | 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 |
Dyskusja:
Aby znaleźć różnicę między datami, użyj DATEDIFF(datepart, startdate, enddate) funkcjonować. datepart argument określa część daty/daty/godziny, w której chcesz wyrazić różnicę. Jego wartością może być year , quarter , month , day , minute itd. W tym przykładzie chcesz wyrazić różnicę w dniach, więc pierwszym argumentem jest dzień. Dwa pozostałe argumenty to data, od której zaczynasz liczenie i data, w której przestajesz liczyć – w tym przypadku departure i arrival , odpowiednio.
W większości przypadków to, czego naprawdę potrzebujesz, to liczba dni od pierwszej do drugiej daty włącznie . Następnie należy dodać 1 dzień do różnicy w dniach:DATEDIFF(day, departure, arrival) + 1 .