Проблем:
Имате две колони от типа дата и искате да изчислите разликата между тях.
Пример:
В travel таблица, има три колони:id , departure и arrival . Искате да изчислите разликата между arrival и departure , или броя на дните от arrival до тръгване включително.
travel таблицата изглежда така:
| id | заминаване | пристигане |
|---|---|---|
| 1 | 25.03.2018 | 05.04.2018 |
| 2 | 12.09.2019 | 23.09.2019 |
| 3 | 14.07.2018 | 14.07.2018 |
| 4 | 2018-01-05 | 08.01.2018 |
Решение:
SELECT id, departure, arrival, DATEDIFF(day, departure, arrival) AS date_difference, DATEDIFF(day, departure, arrival) + 1 AS days_inclusive FROM travel;
Резултатът е:
| id | заминаване | пристигане | разлика_дата | дни |
|---|---|---|---|---|
| 1 | 25.03.2018 | 05.04.2018 | 11 | 12 |
| 2 | 12.09.2019 | 23.09.2019 | 11 | 12 |
| 3 | 14.07.2018 | 14.07.2018 | 0 | 1 |
| 4 | 2018-01-05 | 08.01.2018 | 3 | 4 |
Дискусия:
За да намерите разликата между датите, използвайте DATEDIFF(datepart, startdate, enddate) функция. datepart аргументът дефинира частта от датата/датата и часа, в която искате да изразите разликата. Стойността му може да бъде year , quarter , month , day , minute , и т.н. В този пример искате да изразите разликата в дни, така че първият аргумент е ден. Другите два аргумента са датата, от която започвате да броите, и датата, на която спирате да броите – В този случай departure и arrival , съответно.
В повечето случаи това, което наистина искате, е броят на дните от първата дата до втората дата включително . След това трябва да добавите 1 ден към разликата в дните:DATEDIFF(day, departure, arrival) + 1 .