Найти в Дзене

Лёгкий способ выборки данных за последний месяц (или любой другой интервал) в PostgreSQL

Недавно мне понадобилось выбрать данные из большой таблицы за последний месяц. Мои поиски того, как это сделать проще всего, привели меня к знакомству с типом данных в PostgreSQL, который я до этого не знал (хотя и догадывался о его существовании) — interval (документация). Предыдущий подход с использованием конкретной даты Раньше я указывал какую-то конкретную дату в запросе, например: SELECT
*
FROM
book
WHERE
completed_at > '09/18/2022 00:00:00' То есть мне приходилось высчитывать примерную дату, которая была раньше на один месяц (или любой другой нужный мне интервал), а затем строить свой запрос использую жёстко указанную дату. Новый подход с использованием interval SELECT
*
FROM
book
WHERE
completed_at > now() - interval '30 day' Код now() - interval '30 day' автоматически высчитывает дату в прошлом, которая раньше текущей даты на указанный промежуток времени (в этом примере — 30 дней). Так же с interval можно использовать и другие единицы измерения времени:
Оглавление
Photo by Nam Anh on Unsplash https://unsplash.com/photos/QJbyG6O0ick
Photo by Nam Anh on Unsplash https://unsplash.com/photos/QJbyG6O0ick

Недавно мне понадобилось выбрать данные из большой таблицы за последний месяц. Мои поиски того, как это сделать проще всего, привели меня к знакомству с типом данных в PostgreSQL, который я до этого не знал (хотя и догадывался о его существовании) — interval (документация).

Предыдущий подход с использованием конкретной даты

Раньше я указывал какую-то конкретную дату в запросе, например:

SELECT
*
FROM
book
WHERE
completed_at > '09/18/2022 00:00:00'

То есть мне приходилось высчитывать примерную дату, которая была раньше на один месяц (или любой другой нужный мне интервал), а затем строить свой запрос использую жёстко указанную дату.

Новый подход с использованием interval

SELECT
*
FROM
book
WHERE
completed_at > now() - interval '30 day'

Код now() - interval '30 day' автоматически высчитывает дату в прошлом, которая раньше текущей даты на указанный промежуток времени (в этом примере — 30 дней).

Так же с interval можно использовать и другие единицы измерения времени: microsecond, millisecond, second, minute, hour, day, week, month, year, decade, century, millennium (которые обозначают соответственно микросекунды, миллисекунды, секунды, минуты, часы, дни, недели, месяцы, годы, десятилетия, века и тысячелетия), либо эти же слова во множественном числе, либо их сокращения.

Успешных запросов!

Забудьте про установку оборудования, настройку ПО и сложности администрирования — облачные базы Timeweb Cloud готовы за пару кликов!

#postgresql #postgres