Функция DATEDIFF в SQL: Почему мы её любим
«Сколько времени прошло с тех пор, как этот клиент последний раз делал у нас заказ?»
«Какое среднее количество дней до конверсии?»
Бизнес-пользователи будут задавать эти вопросы, а специалисты по данным должны будут на них ответить, и единственный способ решить их — это вычислить время между двумя разными датами. К счастью, есть удобная функция DATEDIFF, которая может это сделать за вас.
Функция DATEDIFF возвращает разницу в указанных единицах (например, дни, недели, годы) между начальной и конечной датой/временем. Это простая и широко используемая функция, которую вы будете использовать чаще, чем ожидаете.
Что такое SQL функция? На высоком уровне функция принимает входные данные (или несколько входных данных) и возвращает манипуляцию с этими данными. Некоторые распространенные SQL функции — это COALESCE, LOWER и EXTRACT. Например, функция COALESCE принимает группу значений и возвращает первое ненулевое значение из этой группы.
DATEDIFF немного похожа на вашу любимую пару носков; вы обычно легко находите первый и чувствуете, что день будет отличным. Но по какой-то причине, чтобы найти второй носок, нужно немного покопаться в ящике. DATEDIFF — это эта пара носков: вы неизбежно будете гуглить синтаксис почти каждый раз, когда используете её, но не сможете обойтись без неё в течение дня.
В этом посте мы рассмотрим, как использовать функцию DATEDIFF в различных хранилищах данных и как писать более стандартизированные функции DATEDIFF с использованием макроса dbt (или успешно находить свои носки в паре за один раз).
Как использовать функцию DATEDIFF
Для функции DATEDIFF передаются три элемента или аргумента:
- Часть даты: Это дни/месяцы/недели/годы (единица) разницы, которая вычисляется
- Первая (начальная) дата/время
- Вторая (конечная) дата/время
Функция DATEDIFF может использоваться в операторах SELECT и WHERE.
Большинство современных облачных хранилищ данных поддерживают некоторый тип функции DATEDIFF. Могут быть небольшие различия в порядке аргументов и названии функции DATEDIFF в разных хранилищах данных, но функциональность остается практически одинаковой.
Ниже мы опишем некоторые незначительные различия в реализации между некоторыми хранилищами данных.
DATEDIFF в Snowflake, Amazon Redshift и Databricks
Синтаксис для использования функции DATEDIFF в Snowflake, Amazon Redshift и Databricks выглядит следующим образом:
datediff(<date part>, <start date/time>, <end date/time>)