PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да изчислим разликата между две времеви марки в PostgreSQL

Проблем:

Имате две колони от типа timestamp и искате да изчислите разликата между тях.

Пример:

В travel таблица, има три колони:id , departure и arrival . Искате да изчислите разликата между arrival и departure .

travel таблицата изглежда така:

id отпътуване пристигане
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

Решение 1 (разлика в дни, часове, минути и секунди):

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

Резултатът е:

id отпътуване пристигане разлика
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 дни 19:30:00
2 2019-09-12 15:50:00 23.10.2019 10:30:30 40 дни 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 дни 05:25:00

Дискусия:

За да изчислите разликата между клеймите за време в PostgreSQL, просто извадете началната дата от крайната дата. Тук ще бъде arrival - departure . Разликата ще бъде от типа interval , което означава, че ще го видите за дни, часове, минути и секунди.

Решение 2 (разлика в години, месеци, дни, часове, минути и секунди):

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

Резултатът е:

id отпътуване пристигане разлика
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 дни 19:30:00
2 2019-09-12 15:50:00 23.10.2019 10:30:30 1 мес. 10 дни 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 година 3 дни 05:25:00

Дискусия:

Ако искате да получите разликата в години, месеци, дни, часове, минути и секунди, използвайте AGE(end, start) функция. Тук ще бъде AGE(arrival, departure) . В това решение получената колона също е от типа interval .

Решение 3 (разлика в секунди):

SELECT
  id,
  departure,
  arrival,
  EXTRACT(EPOCH FROM (arrival - departure)) AS difference
FROM travel;
id отпътуване пристигане разлика
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

Дискусия:

Ако искате да изчислите разликата между времевите марки в секунди в PostgreSQL, извадете една дата от другата (тук:arrival - departure ), след което извлечете EPOCH от разликата, за да го получите за секунди. Ето повече за EXTRACT() функция.


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. Postgresql:Как да намерите pg_hba.conf файл с Mac OS X

  2. Как работи AT TIME ZONE в PostgreSQL

  3. Как да направя слушател на база данни с java?

  4. Как да опресня JPA обекти, когато бекенд базата данни се промени асинхронно?

  5. Изберете тип данни на полето в postgres