Арифметика дат и INTERVAL
Прибавляйте и вычитайте даты с помощью INTERVAL, вычисляйте длительности и создавайте относительные фильтры дат, например «последние 7 дней»
«Арифметика дат и INTERVAL» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Повторение типов даты и времени
Четыре основных типа даты и времени в PostgreSQL:
DATE— календарный день без времениTIME— время сутокTIMESTAMP— дата и время без часового поясаTIMESTAMPTZ— дата, время и часовой пояс (рекомендуется для событий)
INTERVAL: промежуток времени
INTERVAL — это длительность. Вы прибавляете его к дате или метке времени либо вычитаете его из них:
SELECT NOW() + INTERVAL '1 day';
SELECT NOW() - INTERVAL '30 days';
SELECT NOW() + INTERVAL '3 months 2 weeks';
SELECT INTERVAL '1 hour' + INTERVAL '15 minutes';Единицы INTERVAL
Можно использовать year, month, week, day, hour, minute, second (в единственном или множественном числе):
SELECT INTERVAL '2 years 6 months';
SELECT INTERVAL '1 week';
SELECT INTERVAL '90 seconds';Распространённые фильтры по относительным датам
Основные запросы для «последних N дней»:
SELECT * FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';
SELECT * FROM events
WHERE created_at >= CURRENT_DATE - INTERVAL '1 month';Добавление дней к DATE
PostgreSQL также позволяет использовать конструкцию date + integer для «добавления N дней»:
SELECT DATE '2024-01-01' + 30; -- 2024-01-31
SELECT DATE '2024-01-01' - 1; -- 2023-12-31Вычитание двух меток времени
Разность двух меток времени имеет тип INTERVAL:
SELECT NOW() - '2024-01-01'::TIMESTAMP;
-- → '125 days 14:30:00'
SELECT EXTRACT(EPOCH FROM (NOW() - created_at))/3600 AS hours_ago
FROM events;AGE: разница в понятном виде
AGE(end, start) возвращает INTERVAL в годах, месяцах и днях:
SELECT AGE(NOW(), birth_date) AS age_interval
FROM users WHERE id = 1;
SELECT EXTRACT(YEAR FROM AGE(birth_date)) AS age_in_years
FROM users;Добавление месяцев — будьте внимательны
Добавление месяца выполняется по календарным правилам. 2024-01-31 + 1 month = 2024-02-29 (дата ограничивается последним днём месяца):
SELECT DATE '2024-01-31' + INTERVAL '1 month'; -- 2024-02-29
SELECT DATE '2024-03-31' + INTERVAL '1 month'; -- 2024-04-30CURRENT_DATE и NOW()
Типы возвращаемых значений различаются — выбирайте подходящий:
SELECT CURRENT_DATE; -- 2024-03-15 (DATE)
SELECT CURRENT_TIME; -- 14:30:00+02 (TIMETZ)
SELECT CURRENT_TIMESTAMP; -- 2024-03-15 14:30:00+02 (TIMESTAMPTZ)
SELECT NOW(); -- alias for CURRENT_TIMESTAMPСоздание дат из отдельных компонентов
Создавайте даты из целочисленных столбцов:
SELECT MAKE_DATE(year, month, day) FROM birthdays;
SELECT MAKE_TIMESTAMP(2024, 3, 15, 14, 30, 0.0);Индексы для выражений с датами
Индекс для created_at хорошо обрабатывает запросы по диапазону. Для «событий в марте» фильтр по диапазону быстрее усечения по месяцу:
-- Index-friendly:
WHERE created_at >= '2024-03-01' AND created_at < '2024-04-01';
-- Less friendly (works only with expression index):
WHERE date_trunc('month', created_at) = '2024-03-01';Повторение
Арифметика дат в SQL гибкая и надёжная.
- INTERVAL для длительностей
- Прямое сложение и вычитание
- AGE для промежутков в понятном виде
- Полуоткрытые диапазоны лучше всего подходят для индексов
Быстрая проверка
Какое выражение возвращает события за последние 7 дней?
Часто задаваемые вопросы
Урок «Арифметика дат и INTERVAL» бесплатный?
Да — полный текст урока «Арифметика дат и INTERVAL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Арифметика дат и INTERVAL»?
Прибавляйте и вычитайте даты с помощью INTERVAL, вычисляйте длительности и создавайте относительные фильтры дат, например «последние 7 дней» Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Арифметика дат и INTERVAL»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Арифметика дат и INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Часовые пояса: TIMESTAMP и TIMESTAMPTZ
- Распространённые отчёты по датам (MTD, WoW, YoY)