sql >> Databáze >  >> RDS >> PostgreSQL

Jak vypočítat rozdíl mezi dvěma časovými razítky v PostgreSQL

Problém:

Máte dva sloupce typu timestamp a chcete vypočítat rozdíl mezi nimi.

Příklad:

V travel tabulka má tři sloupce:id , departure a arrival . Chcete vypočítat rozdíl mezi arrival a departure .

travel tabulka vypadá takto:

id odjezd příjezd
1 2018-03-25 12:00:00 2018-04-05 07:30:00
2 2019-09-12 15:50:00 23. 10. 2019 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

Řešení 1 (rozdíl ve dnech, hodinách, minutách a sekundách):

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

Výsledek je:

id odjezd příjezd rozdíl
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 dní 19:30:00
2 2019-09-12 15:50:00 23. 10. 2019 10:30:30 40 dní 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 dní 05:25:00

Diskuse:

Chcete-li vypočítat rozdíl mezi časovými razítky v PostgreSQL, jednoduše odečtěte počáteční časové razítko od koncového časového razítka. Zde by to bylo arrival - departure . Rozdíl bude typu interval , což znamená, že jej uvidíte ve dnech, hodinách, minutách a sekundách.

Řešení 2 (rozdíl v letech, měsících, dnech, hodinách, minutách a sekundách):

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

Výsledek je:

id odjezd příjezd rozdíl
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 dní 19:30:00
2 2019-09-12 15:50:00 23. 10. 2019 10:30:30 1 po 10 dní 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 rok 3 dny 05:25:00

Diskuse:

Pokud chcete získat rozdíl v letech, měsících, dnech, hodinách, minutách a sekundách, použijte AGE(end, start) funkce. Zde by to bylo AGE(arrival, departure) . V tomto řešení je výsledný sloupec také typu interval .

Řešení 3 (rozdíl v sekundách):

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
id odjezd příjezd rozdíl
1 2018-03-25 12:00:00 2018-04-05 07:30:00 934200
2 2019-09-12 15:50:00 23. 10. 2019 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

Diskuse:

Pokud chcete v PostgreSQL vypočítat rozdíl mezi časovými razítky v sekundách, odečtěte jedno datum od druhého (zde:arrival - departure ) a poté extrahujte EPOCH z rozdílu, abyste to dostali během několika sekund. Zde je více o EXTRACT() funkce.


  1. Vydán SQL Developer 4.1.3

  2. Vliv různých technik zpracování chyb na výkon

  3. Příklady MySQL SOUNDEX().

  4. Jak nainstalovat Libreoffice na Ubuntu 16.04