Функция EXTRACT() в SQL: год, месяц и день недели из даты

EXTRACT(поле FROM дата) достаёт из даты или времени одно числовое поле: год, месяц, день, день недели (dow), час, квартал. В отличие от date_trunc, которая обрезает дату для группировки, EXTRACT возвращает число — им удобно фильтровать (только выходные, только Q4) и строить признаки для моделей.

Синтаксис

EXTRACT(YEAR | MONTH | DOW | HOUR | QUARTER FROM timestamp_колонка)

Примеры использования

Пример 1: Заказы по дням недели (0 = воскресенье)

SELECT EXTRACT(DOW FROM created_at) AS weekday,
       COUNT(*) AS orders
FROM orders
GROUP BY 1
ORDER BY 1;

Результат:

weekday | orders
0       | 210
1       | 340
6       | 180

Пример 2: Только заказы четвёртого квартала

SELECT *
FROM orders
WHERE EXTRACT(QUARTER FROM created_at) = 4;

Результат:

order_id | created_at
88       | 2026-10-05
91       | 2026-12-20
Порешать SQL-задачи в тренажёре →

Типичная ошибка

EXTRACT(DOW) в PostgreSQL нумерует дни с воскресенья = 0, а EXTRACT(ISODOW) — с понедельника = 1; легко ошибиться на границе недели. В SQLite EXTRACT нет — используй strftime('%w', …) для дня недели или strftime('%Y', …) для года.

Где спрашивают на собеседовании

EXTRACT спрашивают в задачах на сезонность и фильтры по календарю: «заказы по дням недели», «активность по часам». Умей объяснить разницу с date_trunc: EXTRACT — для числового признака/фильтра, date_trunc — для группировки в ряд.

FAQ: частые вопросы про EXTRACT

Как получить день недели через EXTRACT?

EXTRACT(DOW FROM дата) вернёт 0–6, где 0 — воскресенье. Если нужен ISO-формат (1 — понедельник, 7 — воскресенье), используй EXTRACT(ISODOW FROM дата).

Чем EXTRACT отличается от DATE_PART?

В PostgreSQL они почти эквивалентны: EXTRACT(field FROM date) и DATE_PART('field', date) возвращают одно и то же число. EXTRACT — стандарт ANSI, DATE_PART — синтаксис PostgreSQL.

Есть ли EXTRACT в SQLite?

Нет, в SQLite используют strftime с форматными кодами: %Y — год, %m — месяц, %w — день недели, %H — час.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Работа с датами

Другие функции SQL

LAG · date_trunc · strftime · TO_CHAR · AGE · CURRENT_DATE

Открыть SQL-тренажёр (565 задач) →