Problém:
Máte dva sloupce typu timestamp
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
.
travel
tabulka vypadá takto:
id | odjezd | příjezd |
---|---|---|
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 |
Řešení 1 (rozdíl ve dnech):
SELECT id, departure, arrival, JULIANDAY(arrival) - JULIANDAY(departure) AS difference FROM travel;
Výsledek je:
id | odjezd | příjezd | rozdíl |
---|---|---|---|
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 |
Diskuse:
Chcete-li vypočítat rozdíl mezi časovými razítky v SQLite, použijte JULIANDAY()
funkce pro obě časová razítka, pak odečtěte jedno od druhého. Tímto způsobem získáte rozdíl ve dnech. Celočíselná část rozdílu je počet celých dnů a desetinná část představuje částečný den.
JULIANDAY()
funkce vrací počet dní od poledne greenwichského středního času 24. listopadu 4714 př. Více o této funkci si můžete přečíst v dokumentaci.
Řešení 2 (rozdíl v sekundách):
SELECT id, departure, arrival, ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference FROM travel;
Výsledek je:
id | odjezd | příjezd | rozdíl |
---|---|---|---|
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 |
Diskuse:
Pokud chcete vypočítat rozdíl mezi časovými razítky v sekundách, vynásobte desetinný rozdíl ve dnech počtem sekund v den, což se rovná 24 * 60 * 60 = 86400
nebo součin počtu hodin v den, počtu minut v hodině a počtu sekund v minutě. Protože desetinné části pro rozdíl ve dnech nejsou 100% přesné kvůli chybám v zaokrouhlování, můžete získat nenulovou desetinnou část. Zaokrouhlení výsledku na nejbližší celé číslo pomocí ROUND()
funkce, řeší problém.
Podobně můžete vypočítat rozdíl v minutách nebo v hodinách. Stačí změnit * 86400 to * 3600
(minuty) nebo * 60
(hodiny).