Problem:
Du har två kolumner av typen timestamp
och du vill beräkna skillnaden mellan dem.
Exempel:
I travel
tabell, det finns tre kolumner:id
, departure
och arrival
. Du vill beräkna skillnaden mellan arrival
och departure
.
travel
tabellen ser ut så här:
id | avgång | ankomst |
---|---|---|
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ösning 1 (skillnad i dagar, timmar, minuter och sekunder):
SELECT id, departure, arrival, arrival - departure AS difference FROM travel;
Resultatet är:
id | avgång | ankomst | skillnad |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10 dagar 19:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 40 dagar 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 dagar 05:25:00 |
Diskussion:
För att beräkna skillnaden mellan tidsstämplarna i PostgreSQL, subtrahera helt enkelt starttidsstämpeln från sluttidsstämpeln. Här skulle det vara arrival - departure
. Skillnaden kommer att vara av typen interval
, vilket innebär att du ser det i dagar, timmar, minuter och sekunder.
Lösning 2 (skillnad i år, månader, dagar, timmar, minuter och sekunder):
SELECT id, departure, arrival, AGE(arrival, departure) AS difference FROM travel;
Resultatet är:
id | avgång | ankomst | skillnad |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10 dagar 19:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 1 mån 10 dagar 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 år 3 dagar 05:25:00 |
Diskussion:
Om du vill se skillnaden i år, månader, dagar, timmar, minuter och sekunder, använd AGE(end, start)
fungera. Här skulle det vara AGE(arrival, departure)
. I den här lösningen är den resulterande kolumnen också av typen interval
.
Lösning 3 (skillnad i sekunder):
SELECT id, departure, arrival, EXTRACT(EPOCH FROM (arrival - departure)) AS difference FROM travel;
id | avgång | ankomst | skillnad |
---|---|---|---|
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:
Om du vill beräkna skillnaden mellan tidsstämplarna i sekunder i PostgreSQL, subtrahera ett datum från det andra (här:arrival - departure
) extrahera sedan EPOCH
från skillnaden för att få det på några sekunder. Här är mer om EXTRACT()
funktion.