sql >> Databáze >  >> RDS >> SQLite

Jak vypočítat rozdíl mezi dvěma časovými razítky v SQLite

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).


  1. Generování stromu založeného na hloubce z hierarchických dat v MySQL (žádné CTE)

  2. Jak převést excelový list do databáze sqlite v Androidu

  3. Oracle SQL Developer 21.4.2 a SQLcl 21.4.1 jsou nyní k dispozici

  4. MariaDB Connector/Python Beta nyní k dispozici