SQLite
 sql >> Database >  >> RDS >> SQLite

Come calcolare la differenza tra due timestamp in SQLite

Problema:

Hai due colonne del tipo timestamp e vuoi calcolare la differenza tra loro.

Esempio:

Nel travel tabella, ci sono tre colonne:id , departure e arrival . Vorresti calcolare la differenza tra l'arrival e la departure .

Il travel la tabella si presenta così:

id partenza arrivo
1 25-03-2018 12:00:00 2018-04-05 07:30:00
2 12-09-2019 15:50:00 23-10-2019 10:30:30
3 14-07-2018 16:15:00 2018-07-14 20:40:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00

Soluzione 1 (differenza in giorni):

SELECT
  id,
  departure,
  arrival,
  JULIANDAY(arrival) - JULIANDAY(departure) AS difference
FROM travel;

Il risultato è:

id partenza arrivo differenza
1 25-03-2018 12:00:00 2018-04-05 07:30:00 10.8125
2 12-09-2019 15:50:00 23-10-2019 10:30:30 40.778125000186265
3 14-07-2018 16:15:00 2018-07-14 20:40:30 0.18437499972060323
4 05-01-2018 08:35:00 08-01-2019 14:00:00 368.2256944444962

Discussione:

Per calcolare la differenza tra i timestamp in SQLite, usa JULIANDAY() funzione per entrambi i timestamp, quindi sottrai uno dall'altro. In questo modo, ottieni la differenza in giorni. La parte intera della differenza è il numero di giorni interi e la parte decimale rappresenta un giorno parziale.

Il JULIANDAY() La funzione restituisce il numero di giorni trascorsi da mezzogiorno ora di Greenwich del 24 novembre 4714 a.C. Puoi leggere di più su questa funzione nella documentazione.

Soluzione 2 (differenza in secondi):

SELECT
  id,
  departure,
  arrival,
  ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference
FROM travel;

Il risultato è:

id partenza arrivo differenza
1 25-03-2018 12:00:00 2018-04-05 07:30:00 934200
2 12-09-2019 15:50:00 23-10-2019 10:30:30 3523230
3 14-07-2018 16:15:00 2018-07-14 20:40:30 15930
4 05-01-2018 08:35:00 08-01-2019 14:00:00 31814700

Discussione:

Se desideri calcolare la differenza tra i timestamp in secondi, moltiplica la differenza decimale in giorni per il numero di secondi in un giorno, che equivale a 24 * 60 * 60 = 86400 o il prodotto del numero di ore in un giorno, il numero di minuti in un'ora e il numero di secondi in un minuto. Poiché le parti decimali per la differenza in giorni non sono accurate al 100% a causa di errori di arrotondamento, potresti ottenere una parte decimale diversa da zero. Arrotondando il risultato all'intero più vicino, usando ROUND() funzione, risolve il problema.

Allo stesso modo, puoi calcolare la differenza in minuti o in ore. Basta cambiare * 86400 to * 3600 (minuti) o * 60 (ore).