SQL DATE_PART
В этом посте мы подробно рассмотрим функцию DATE_PART, как она работает и почему мы ее используем.
Функция DATE_PART позволяет извлечь указанную часть даты из даты/времени. Например, если вы хотите извлечь месяц из даты 14 февраля 2022 года, она вернет 2, так как февраль — это второй месяц в году.
Как использовать функцию DATE_PART
Как и большинство других SQL-функций, вам нужно передать аргументы; для функции DATE_PART вы передаете поле даты/времени, из которого хотите извлечь часть даты, и указываете часть, которую хотите извлечь. Вы можете извлечь числовой месяц, дату, год, час, секунды и т.д. из поля временной метки или даты, используя функцию DATE_PART с помощью следующего синтаксиса:
date_part(<часть даты/времени>, <поле даты/дата>)
Давайте рассмотрим практический пример ниже.
Пример функции DATE_PART
select
date_part('month', order_date) as order_month,
round(avg(amount)) as avg_order_amount
from {{ ref('orders') }}
group by 1
Этот запрос, использующий таблицу orders
из Jaffle Shop, вернет округленную сумму заказа для каждого месяца заказа (представленного в виде числового значения):
order_month | avg_order_amount |
---|---|
1 | 17 |
2 | 15 |
3 | 18 |
4 | 17 |
В отличие от функции DATE_TRUNC, которая фактически усекает дату до ее первого вхождения указанной части даты (таким образом, сохраняя структуру даты), функция DATE_PART возвращает числовое значение из поля даты.
Вы можете часто видеть, что функция DATE_PART заменяется функцией EXTRACT, которая выполняет ту же функциональность.
Синтаксис функции DATE_PART в Snowflake, Databricks, BigQuery и Redshift
Хранилище данных | Поддержка DATE_PART? | Примечания |
---|---|---|
Snowflake | ✅ | |
Databricks | ✅ | |
Amazon Redshift | ✅ | |
Google BigQuery | ❌ | BigQuery поддерживает функцию EXTRACT, которая выполняет ту же функциональность, что и функция DATE_PART |
Postgres | ✅ | Это чрезмерно педантично, и вы, вероятно, никогда не столкнетесь с проблемой, когда DATE_PART и EXTRACT оцениваются в различия в значениях, которые действительно имеют значение, но стоит отметить. Функции DATE_PART и EXTRACT в Postgres ранее давали одинаковый результат. Однако с Postgres 14 функция EXTRACT теперь возвращает числовой тип вместо 8-байтового числа с плавающей запятой. |
Сценарии использования функции DATE_PART
Мы чаще всего видим использование функции DATE_PART или EXTRACT в работе с данными для анализа:
- Фискальные календари: Если ваш бизнес использует фискальные годы или календари, отличающиеся от обычного 12-месячного цикла, функции DATE_PART могут помочь создать соответствие между фискальными и обычными календарями
- Разовые анализы: Функции DATE_PART полезны в разовых анализах и запросах, когда вам нужно рассмотреть значения, сгруппированные по периодам дат или для сравнения периодов
Это не исчерпывающий список того, где ваша команда может использовать функцию DATE_PART в ваших моделях dbt и логике BI-инструментов, но он содержит некоторые общие сценарии, с которыми аналитики сталкиваются ежедневно.