SQLite
 sql >> Datenbank >  >> RDS >> SQLite

So berechnen Sie den Unterschied zwischen zwei Zeitstempeln in SQLite

Problem:

Sie haben zwei Spalten vom Typ timestamp und Sie möchten die Differenz zwischen ihnen berechnen.

Beispiel:

Im travel Tabelle gibt es drei Spalten:id , departure , und arrival . Sie möchten die Differenz zwischen der arrival berechnen und die departure .

Die travel Tabelle sieht so aus:

id Abfahrt Ankunft
1 2018-03-25 12:00:00 2018-04-05 07:30:00
2 2019-09-12 15:50:00 2019-10-23 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

Lösung 1 (Differenz in Tagen):

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

Das Ergebnis ist:

id Abfahrt Ankunft Unterschied
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10.8125
2 2019-09-12 15:50:00 2019-10-23 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

Diskussion:

Um den Unterschied zwischen den Zeitstempeln in SQLite zu berechnen, verwenden Sie JULIANDAY() Funktion für beide Zeitstempel, dann subtrahieren Sie einen vom anderen. Auf diese Weise erhalten Sie die Differenz in Tagen. Der ganzzahlige Teil der Differenz ist die Anzahl der vollen Tage und der Dezimalteil stellt einen Teiltag dar.

Der JULIANDAY() Die Funktion gibt die Anzahl der Tage seit Mittag Greenwich Mean Time am 24. November 4714 v. Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation.

Lösung 2 (Unterschied in Sekunden):

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

Das Ergebnis ist:

id Abfahrt Ankunft Unterschied
1 2018-03-25 12:00:00 2018-04-05 07:30:00 934200
2 2019-09-12 15:50:00 2019-10-23 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

Diskussion:

Wenn Sie die Differenz zwischen den Zeitstempeln in Sekunden berechnen möchten, multiplizieren Sie die dezimale Differenz in Tagen mit der Anzahl der Sekunden eines Tages, was 24 * 60 * 60 = 86400 entspricht , oder das Produkt aus der Anzahl der Stunden eines Tages, der Anzahl der Minuten einer Stunde und der Anzahl der Sekunden einer Minute. Da die Dezimalstellen für die Differenz in Tagen aufgrund von Rundungsfehlern nicht 100 % genau sind, erhalten Sie möglicherweise eine Dezimalstelle ungleich null. Runden des Ergebnisses auf die nächste Ganzzahl mithilfe von ROUND() Funktion, behebt das Problem.

Ebenso könnten Sie die Differenz in Minuten oder in Stunden berechnen. Ändern Sie einfach * 86400 to * 3600 (Minuten) oder * 60 (Stunden).