PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come calcolare la differenza tra due timestamp in PostgreSQL

Problema:

Hai due colonne del tipo timestamp e vuoi calcolare la differenza tra loro.

Esempio:

Nel travel tabella, ci sono tre colonne:id , departure e arrival . Vorresti calcolare la differenza tra l'arrival e la departure .

Il travel la tabella si presenta così:

id partenza arrivo
1 25-03-2018 12:00:00 2018-04-05 07:30:00
2 12-09-2019 15:50:00 23-10-2019 10:30:30
3 14-07-2018 16:15:00 2018-07-14 20:40:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00

Soluzione 1 (differenza in giorni, ore, minuti e secondi):

SELECT
  id,
  departure,
  arrival,
  arrival - departure AS difference
FROM travel;

Il risultato è:

id partenza arrivo differenza
1 25-03-2018 12:00:00 2018-04-05 07:30:00 10 giorni 19:30:00
2 12-09-2019 15:50:00 23-10-2019 10:30:30 40 giorni 18:40:30
3 14-07-2018 16:15:00 2018-07-14 20:40:30 04:25:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00 368 giorni 05:25:00

Discussione:

Per calcolare la differenza tra i timestamp in PostgreSQL, è sufficiente sottrarre il timestamp di inizio dal timestamp di fine. Qui sarebbe arrival - departure . La differenza sarà del tipo interval , il che significa che lo vedrai tra giorni, ore, minuti e secondi.

Soluzione 2 (differenza in anni, mesi, giorni, ore, minuti e secondi):

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

Il risultato è:

id partenza arrivo differenza
1 25-03-2018 12:00:00 2018-04-05 07:30:00 10 giorni 19:30:00
2 12-09-2019 15:50:00 23-10-2019 10:30:30 1 lun 10 giorni 18:40:30
3 14-07-2018 16:15:00 2018-07-14 20:40:30 04:25:30
4 05-01-2018 08:35:00 08-01-2019 14:00:00 1 anno 3 giorni 05:25:00

Discussione:

Se desideri ottenere la differenza in anni, mesi, giorni, ore, minuti e secondi, utilizza AGE(end, start) funzione. Qui sarebbe AGE(arrival, departure) . In questa soluzione, anche la colonna risultante è del tipo interval .

Soluzione 3 (differenza in secondi):

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
id partenza arrivo differenza
1 25-03-2018 12:00:00 2018-04-05 07:30:00 934200
2 12-09-2019 15:50:00 23-10-2019 10:30:30 3523230
3 14-07-2018 16:15:00 2018-07-14 20:40:30 15930
4 05-01-2018 08:35:00 08-01-2019 14:00:00 31814700

Discussione:

Se desideri calcolare la differenza tra i timestamp in secondi in PostgreSQL, sottrai una data dall'altra (qui:arrival - departure ) quindi estrai EPOCH dalla differenza per ottenerlo in pochi secondi. Ecco di più su EXTRACT() funzione.


No