Перейти к содержанию

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

Срок вызревания, месяцев – это специальный столбец с выражением:

datetimeDiff([Начало вызревания], [Завершение вызревания], "month")

Для расчёта текущего времени выдержки в месяцах подойдёт now (текущее значение даты и времени) в качестве второго параметра datetimeDiff, например:

datetimeDiff([Начало вызревания], now, "month")

Если нужна текущая выдержка сыра в днях, можно использовать "day":

datetimeDiff([Начало вызревания], now, "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:

datetimeDiff([Начало вызревания], [Завершение вызревания], "month")

Некоторые базы данных, такие как Snowflake и BigQuery, поддерживают такие функции, как DATEDIFF или DATE_DIFF. Для получения дополнительной информации ознакомьтесь со списком общих справочных руководств по SQL (документация Metabase, англ.).

Таблицы

Если наши данные образца сыра находятся в электронной таблице, где «Начало вызревания» находится в столбце B, а «Завершение вызревания» — в столбце C:

DATEDIF(B1, C1, "M")

дает такой же результат как и:

datetimeDiff([Начало вызревания], [Завершение вызревания], "month")

Примечание

Да, DATEDIF выглядит немного неправильно, но функция электронной таблицы на самом деле является DATEDIF() с одной буквой "f", а не DATEDIFF().

Python

Предполагая, что данные образца сыра находятся в структуре данных pandas в поле df, вы можете напрямую вычесть даты и использовать timedelta64 numpy, чтобы преобразовать разницу в месяцы:

df['Срок вызревания, месяцев'] = (df['Завершение вызревания'] - df['Начало вызревания']) / np.timedelta64(1, 'M')

аналогично:

datetimeDiff([Начало вызревания], [Завершение вызревания], "month")

Дополнительная информация