592 подписчика

Операции с датой и временем в PostgreSQL

534 прочитали

В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.

Для опытов используем таблицу статистики боев, проведенных спортивной организацией Ultimate Fighting Championship (получена скрапингом сайта ufcstats.com, о котором подробнее писал здесь):

В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.

Вывод текущей даты и времени

SELECT current_date, current_time, current_timestamp
В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.-2

Извлечение частичной информации из даты и времени либо интервала

Для этого можно воспользоваться функцией EXTRACT с указанием требуемой информации (Field Value на рисунке ниже) и источника (TIMESTAMP, DATE или INTERVAL):

EXTRACT(значение FROM источник)

Варианты представлены на рисунке ниже (если в источнике передать тип DATE, он будет преобразован в TIMESTAMP):

В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.-3

Для примера получим некоторые части информации из поля даты поединков:

SELECT event, date, fighter_left, fighter_right, EXTRACT(YEAR FROM date) as year, EXTRACT(MONTH FROM date) as month, EXTRACT(DAY FROM date) as day, EXTRACT(HOUR FROM date) as hour
FROM ufc_stat
LIMIT 12
В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.-4

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

Этот функционал можно реализовать с помощью функции AGE:

AGE(дата_и_время,дата_и_время);

Она возвращает интервал между разностью первого и второго аргументов. Если указан только один из них, то в качестве первого выступает текущая дата.

Рассмотрим использование функции на примере вывода поединков UFC, проведенных на расстоянии заданного количества дней (допустим, 385) от текущей даты:

SELECT event, date, fighter_left, fighter_right, AGE(date) as interval_from_now
FROM ufc_stat
WHERE EXTRACT(DAY FROM AGE(date))+ 30*EXTRACT(MONTH FROM AGE(date)) + 365*EXTRACT(YEAR FROM AGE(date)) < 385
В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.-5

В этой статье я расскажу о возможностях работы с датой и временем в PostgreSQL. Основные функции будут разбираться на практических примерах.-6