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.