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