EXTRACT
Возвращает указанную часть даты, времени или интервала.
PostgreSQL 17.9
EXTRACT(field FROM source)- field
- Нужная часть — ключевое слово без кавычекКлючевое словоCENTURYDAYDECADEDOWDOYEPOCHHOURISODOWISOYEARJULIANMICROSECONDSMILLENNIUMMILLISECONDSMINUTEMONTHQUARTERSECONDTIMEZONETIMEZONE_HOURTIMEZONE_MINUTEWEEKYEAR
- FROM source
- Дата, время или интервалtimestamp | interval
Возвращаемое значение
Число (numeric), например 3 для MONTH; для SECOND — с дробной частью; EPOCH для даты — секунды с 1970-01-01 00:00 UTC, для интервала — его длительность в секундах
Примеры
Год из даты
PostgreSQL 17.9
SELECT EXTRACT(
YEAR
FROM TIMESTAMP '2023-01-01'
);Год рождения из таблицы
PostgreSQL 17.9
SELECT member_name,
EXTRACT(
YEAR
FROM birthday
) AS birth_year
FROM FamilyMembers;Секунды в интервале
PostgreSQL 17.9
SELECT EXTRACT(
EPOCH
FROM INTERVAL '1 day 2 hours'
);DOW и ISODOW для воскресенья
PostgreSQL 17.9
SELECT EXTRACT(
DOW
FROM DATE '2024-03-10'
) AS dow,
EXTRACT(
ISODOW
FROM DATE '2024-03-10'
) AS isodow;Неделя и ISO-год на стыке лет
PostgreSQL 17.9
SELECT EXTRACT(
WEEK
FROM DATE '2021-01-01'
) AS week,
EXTRACT(
ISOYEAR
FROM DATE '2021-01-01'
) AS iso_year,
EXTRACT(
YEAR
FROM DATE '2021-01-01'
) AS year;Подробности
Это запись из стандарта SQL — DATE_PART делает то же самое, но возвращает double precision.
День недели: DOW даёт 0 для воскресенья и 6 для субботы, а ISODOW — от 1 для понедельника до 7 для воскресенья. В MySQL DAYOFWEEK считает иначе: воскресенье — 1, суббота — 7.
WEEK — номер недели по ISO: неделя начинается с понедельника, а первые дни января могут относиться к последней неделе прошлого года. Поэтому номер недели берут вместе с ISOYEAR, а не с YEAR.