PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So berechnen Sie den Unterschied zwischen zwei Zeitstempeln in PostgreSQL

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.


No