0Pricing
SQL Academy · Урок

Арифметика дат и 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-30

CURRENT_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 — локальная установка не требуется.

Все уроки этого курса

  1. Арифметика дат и INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Часовые пояса: TIMESTAMP и TIMESTAMPTZ
  4. Распространённые отчёты по датам (MTD, WoW, YoY)
← Назад к SQL Academy