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 (Unterschied in Tagen, Stunden, Minuten und Sekunden):
SELECT id, departure, arrival, arrival - 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 Tage 19:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 40 Tage 18:40:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 04:25:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 368 Tage 05:25:00 |
Diskussion:
Um die Differenz zwischen den Zeitstempeln in PostgreSQL zu berechnen, subtrahieren Sie einfach den Startzeitstempel vom Endzeitstempel. Hier wäre es arrival - departure
. Die Differenz wird vom Typ interval
sein , was bedeutet, dass Sie es in Tagen, Stunden, Minuten und Sekunden sehen.
Lösung 2 (Unterschied in Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden):
SELECT id, departure, arrival, AGE(arrival, 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 Tage 19:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 1 Mo 10 Tage 18:40:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 04:25:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 1 Jahr 3 Tage 05:25:00 |
Diskussion:
Wenn Sie die Differenz in Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden erhalten möchten, verwenden Sie das AGE(end, start)
Funktion. Hier wäre es AGE(arrival, departure)
. In dieser Lösung ist die resultierende Spalte ebenfalls vom Typ interval
.
Lösung 3 (Unterschied in Sekunden):
SELECT id, departure, arrival, EXTRACT(EPOCH FROM (arrival - departure)) AS difference FROM travel;
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 in PostgreSQL die Differenz zwischen den Zeitstempeln in Sekunden berechnen möchten, subtrahieren Sie ein Datum vom anderen (hier:arrival - departure
) extrahieren Sie dann EPOCH
aus der Differenz, um es in Sekunden zu bekommen. Hier ist mehr über EXTRACT()
Funktion.