Проблем:
Имате две колони от типа timestamp
и искате да изчислите разликата между тях.
Пример:
В travel
таблица, има три колони:id
, departure
и arrival
. Искате да изчислите разликата между arrival
и departure
.
travel
таблицата изглежда така:
id | отпътуване | пристигане |
---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 |
2 | 2019-09-12 15:50:00 | 23.10.2019 10:30:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 |
Решение 1 (разлика в дни):
SELECT id, departure, arrival, JULIANDAY(arrival) - JULIANDAY(departure) AS difference FROM travel;
Резултатът е:
id | отпътуване | пристигане | разлика |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10,8125 |
2 | 2019-09-12 15:50:00 | 23.10.2019 10:30:30 | 40,778125000186265 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 0,18437499972060323 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 368.2256944444962 |
Дискусия:
За да изчислите разликата между времевите марки в SQLite, използвайте JULIANDAY()
функция и за двете времеви марки, след което извадете едното от другото. По този начин получавате разликата в дните. Цялата част от разликата е броят на пълните дни, а десетичната част представлява частичен ден.
JULIANDAY()
функцията връща броя на дните след обяд средно време по Гринуич на 24 ноември 4714 г. пр.н.е. Можете да прочетете повече за тази функция в документацията.
Решение 2 (разлика в секунди):
SELECT id, departure, arrival, ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference FROM travel;
Резултатът е:
id | отпътуване | пристигане | разлика |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 934200 |
2 | 2019-09-12 15:50:00 | 23.10.2019 10:30:30 | 3523230 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 15930 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 31814700 |
Дискусия:
Ако искате да изчислите разликата между клеймите за време в секунди, умножете десетичната разлика в дни по броя на секундите на ден, което е равно на 24 * 60 * 60 = 86400
, или произведението от броя на часовете на ден, броя на минутите в един час и броя на секундите в минута. Тъй като десетичните части за разлика в дните не са 100% точни поради грешки при закръгляването, може да получите ненулева десетична част. Закръгляване на резултата до най-близкото цяло число, като се използва ROUND()
функция, отстранява проблема.
По същия начин можете да изчислите разликата в минути или в часове. Просто променете * 86400 to * 3600
(минути) или * 60
(часове).