PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak obliczyć różnicę między dwoma znacznikami czasu w PostgreSQL

Problem:

Masz dwie kolumny typu timestamp i chcesz obliczyć różnicę między nimi.

Przykład:

W travel tabeli, są trzy kolumny:id , departure i arrival . Chcesz obliczyć różnicę między arrival i departure .

travel tabela wygląda tak:

id wyjazd przybycie
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

Rozwiązanie 1 (różnica w dniach, godzinach, minutach i sekundach):

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

Wynik:

id wyjazd przybycie różnica
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 dni 19:30:00
2 2019-09-12 15:50:00 23-10-2019 10:30:30 40 dni 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 dni 05:25:00

Dyskusja:

Aby obliczyć różnicę między znacznikami czasu w PostgreSQL, po prostu odejmij początkowy znacznik czasu od końcowego znacznika czasu. Tutaj byłoby to arrival - departure . Różnica będzie typu interval , co oznacza, że ​​zobaczysz to w dniach, godzinach, minutach i sekundach.

Rozwiązanie 2 (różnica w latach, miesiącach, dniach, godzinach, minutach i sekundach):

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

Wynik:

id wyjazd przybycie różnica
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 dni 19:30:00
2 2019-09-12 15:50:00 23-10-2019 10:30:30 1 pon 10 dni 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 dni 05:25:00

Dyskusja:

Jeśli chcesz uzyskać różnicę w latach, miesiącach, dniach, godzinach, minutach i sekundach, użyj AGE(end, start) funkcjonować. Tutaj byłby to AGE(arrival, departure) . W tym rozwiązaniu wynikowa kolumna jest również typu interval .

Rozwiązanie 3 (różnica w sekundach):

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
id wyjazd przybycie różnica
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

Dyskusja:

Jeśli chcesz obliczyć różnicę między znacznikami czasu w sekundach w PostgreSQL, odejmij jedną datę od drugiej (tutaj:arrival - departure ), a następnie wyodrębnij EPOCH z różnicy, aby uzyskać to w kilka sekund. Oto więcej informacji o EXTRACT() funkcja.


No
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj znak Unicode ze znakami unikodowymi z powrotem na rzeczywisty znak w PostgreSQL

  2. Big Data z PostgreSQL i Apache Spark

  3. Hibernacja i wielodostępna baza danych przy użyciu schematów w PostgreSQL

  4. Indeks PostgreSQL nie jest używany do zapytań o zakresy IP

  5. Jak wyświetlić kod CREATE VIEW dla widoku w PostgreSQL?