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')
аналогично: