DatetimeDiff¶
datetimeDiff возвращает разницу во времени между двумя значениями даты и времени, используя указанную единицу. Обратите внимание, что разница рассчитывается в целых единицах (см. пример ниже).
| Синтаксис | Пример |
|---|---|
datetimeDiff(дата-время1, дата-время2, единица) |
datetimeDiff("2025-02-01", "2025-03-01", "month") |
| Получает разницу между двумя значениями даты и времени (дата-время2 минус дата-время1), используя указанную единицу времени. | 1 |
Параметры¶
дата-время1 и дата-время2 могут быть:
- названием столбца, содержащего данные с метками времени;
- пользовательским выражением, которое возвращает datetime;
- строкой в формате
"YYYY-MM-DD"или"YYYY-MM-DDTHH:MM:SS"(как показано в примере выше).
единица может быть передана как:
"year"— год;"quarter"— квартал;"month"— месяц;"week"— неделя;"day"— день;"hour"— час;"minute"— минута;"second"— секунда.
Подсчёт времени выдержки¶
Допустим, вы производитель сыра и хотите отслеживать процесс вызревания:
| Сыр | Начало вызревания | Завершение вызревания | Срок вызревания, месяцев |
|---|---|---|---|
| Проволоне | 19 января, 2025 | 17 марта, 2025 | 1 |
| Фета | 25 января, 2025 | 3 мая, 2025 | 3 |
| Монтерей Джек | 27 января, 2025 | 11 октября, 2025 | 8 |
Срок вызревания, месяцев – это специальный столбец с выражением:
Для расчёта текущего времени выдержки в месяцах подойдёт now (текущее значение даты и времени) в качестве второго параметра datetimeDiff, например:
Если нужна текущая выдержка сыра в днях, можно использовать "day":
Допустимые типы данных¶
| Типы данных | Работает с datetimeDiff |
|---|---|
| Строка | ❌ |
| Число | ❌ |
| Дата и время | ✅ |
| Условие | ❌ |
| JSON | ❌ |
Под "дата и время" подразумевается «timestamp» и «datetime» в Glarus BI. Для дополнительной информации о типах данных в вашей базе данных см. Руководство по типам данных. Информация о типах данных также приведена в разделе обучения руководства Metabase (англ.).
Если ваши временны́е метки хранятся в базе данных в виде строк или чисел, администратор может преобразовать их во временны́е метки на странице "Метаданные таблиц".
Ограничения¶
На данный момент datetimeDiff недоступен для Druid.
Связанные функции¶
В этом разделе рассматриваются функции и формулы, которые работают так же, как выражение datetimeDiff в Glarus BI.
SQL¶
Когда вы запускаете запрос с помощью конструктора запросов, Glarus BI преобразует ваши графические настройки (фильтры, сводки и т.д.) в запрос и запускает этот запрос в формате вашей базы данных, чтобы получить результаты.
Если наши данные образца сыра хранятся в базе данных PostgreSQL:
SELECT DATE_PART('month', AGE(завершение_вызревания, начало_вызревания)) AS срок_вызревания_мес
FROM cheese
эквивалентно выражению datetimeDiff в Glarus BI:
Некоторые базы данных, такие как Snowflake и BigQuery, поддерживают такие функции, как DATEDIFF или DATE_DIFF. Для получения дополнительной информации ознакомьтесь со списком общих справочных руководств по SQL (документация Metabase, англ.).
Таблицы¶
Если наши данные образца сыра находятся в электронной таблице, где «Начало вызревания» находится в столбце B, а «Завершение вызревания» — в столбце C:
дает такой же результат как и:
Примечание
Да, DATEDIF выглядит немного неправильно, но функция электронной таблицы на самом деле является DATEDIF() с одной буквой "f", а не DATEDIFF().
Python¶
Предполагая, что данные образца сыра находятся в структуре данных pandas в поле df, вы можете напрямую вычесть даты и использовать timedelta64 numpy, чтобы преобразовать разницу в месяцы:
df['Срок вызревания, месяцев'] = (df['Завершение вызревания'] - df['Начало вызревания']) / np.timedelta64(1, 'M')
аналогично: