PostgreSQL | Сколько дней между датами? — efim360.ru

PostgreSQL | Сколько дней между датами?

Как узнать полное количество дней между одной датой и другой датой в PostgreSQL?

У нас есть две даты:

SELECT '2022-07-11 09:36:49.388216'::timestamp without time zone;
SELECT '2022-09-29 16:55:45.104096'::timestamp without time zone;

Нам нужно узнать разницу в днях между самой новой датой и самой старой датой. Как это сделать?

 

Вычитание дат

В PostgreSQL даты можно вычитать друг из друга путём символа дефиса:

SELECT '2022-09-29 16:55:45.104096'::timestamp without time zone - '2022-07-11 09:36:49.388216'::timestamp without time zone;

Обе даты имеют тип timestamp without time zone.

В результате нам вернётся тип данных interval.

Получили разницу между датами в PostgreSQL
Получили разницу между датами в PostgreSQL

Если из меньшей даты вычесть большую, то интервал будет иметь отрицательное значение. По сути интервал просто поменяет знак, а значение будет таким же.

Мы видим, что кроме дней нам прилетели и остальные важные значения касаемо даты - часы, минуты, секунды и т.д.. Но нам нужны только дни. Как их получить?

 

Как получить целое количество дней из интервала в PostgreSQL?

Для решения основной задачи, нам нужно дополнительно воспользоваться функцией EXTRACT(), которая может извлекать определённые поля из объектов "дата/время".

В качестве полей могут выступать следующие:

  • century (век)
  • day (день)
  • decade (декада)
  • dow (день недели)
  • doy (день года)
  • epoch
  • hour
  • isodow
  • isoyear
  • julian
  • microseconds
  • millennium
  • milliseconds
  • minute
  • month
  • quarter
  • second
  • timezone
  • timezone_hour
  • timezone_minute
  • week
  • year

 

Нас будет интересовать поле DAY, которое будет доставать из интервала полное количество дней в отличии от таймштампа.

SELECT EXTRACT(DAY FROM '2022-09-29 16:55:45.104096'::timestamp without time zone - '2022-07-11 09:36:49.388216'::timestamp without time zone);

Этот запрос вернёт нам 80 полных дней в виде числового значения numeric.

Извлекли полное количество дней из интервала между датами в PostgreSQL
Извлекли полное количество дней из интервала между датами в PostgreSQL

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdmin - https://www.pgadmin.org

Официальный сайт СУБД PostgreSQL - https://www.postgresql.org

Раздел "Операторы и функции даты/времени" - https://postgrespro.ru/docs/postgresql/14/functions-datetime

Функция EXTRACT() - https://postgrespro.ru/docs/postgresql/14/functions-datetime#FUNCTIONS-DATETIME-EXTRACT