Дати й часстандарт SQL

EXTRACT

Дістає з дати чи часу окрему частину: рік, місяць, день, годину.

Синтаксис

EXTRACT(<частина> FROM <дата або час>)

Повертає число: YEAR — рік, MONTH — місяць від 1 до 12, DAY — день місяця, HOUR — годину, DOW — день тижня. Частину пишуть без лапок. Зручно, щоб фільтрувати чи групувати за частиною дати: замовлення до обіду, продажі за годинами.

Дані для прикладів

orders

idcreated_atamount
12026-07-03 10:15:00120.50
22026-07-28 18:40:0080.25
32026-08-09 09:05:00199.99
42026-08-21 14:30:0045.00
52026-09-02 11:00:0064.75

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Рік, місяць і день
SELECT EXTRACT(YEAR FROM TIMESTAMP '2026-09-13 15:47') AS year,
EXTRACT(MONTH FROM TIMESTAMP '2026-09-13 15:47') AS month,
EXTRACT(DAY FROM TIMESTAMP '2026-09-13 15:47') AS day;
yearmonthday
2026913
Місяць кожного замовлення
SELECT id, created_at,
EXTRACT(MONTH FROM created_at) AS month
FROM orders;
idcreated_atmonth
12026-07-03 10:15:007
22026-07-28 18:40:007
32026-08-09 09:05:008
42026-08-21 14:30:008
52026-09-02 11:00:009
Замовлення, зроблені до обіду
SELECT id, created_at
FROM orders
WHERE EXTRACT(HOUR FROM created_at) < 12;
idcreated_at
12026-07-03 10:15:00
32026-08-09 09:05:00
52026-09-02 11:00:00

Зверни увагу

Результат — число типу numeric, тож секунди бувають із дробом: EXTRACT(SECOND FROM TIMESTAMP '2026-09-13 15:47:30.5') дає 30.500000.

DOW рахує неділю як 0, а понеділок як 1. Звичний порядок, де понеділок — 1, а неділя — 7, дає ISODOW.

Групування за EXTRACT(MONTH FROM …) зливає однакові місяці різних років в один рядок. Для звітів по місяцях бери DATE_TRUNC('month', …).

Схожі функції

Детально в курсі