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

datetimeDiff

datetimeDiff получает количество времени между двумя значениями даты и времени, используя указанную единицу времени. Обратите внимание, что разница рассчитывается в целых единицах (см. пример ниже).

Синтаксис Пример
datetimeDiff(datetime1, datetime2, unit) datetimeDiff("2022-02-01", "2022-03-01", "month")
Получает разницу между двумя значениями datetime (datetime2 минус datetime 1), используя указанную единицу времени. 1

Параметры

datetime1 и datetime2 могут быть:

  • название столбца метки времени,
  • пользовательское выражение, которое возвращает datetime или
  • строка в формате "YYYY-MM-DD" или "YYYY-MM-DDTHH:MM:SS" (как показано в примере выше).

unit может быть любым из:

  • "year"
  • "quarter"
  • "month"
  • "week"
  • "day"
  • "hour"
  • "minute"
  • "second"

Подсчёт возраста

Допустим, вы производитель сыра и хотите отслеживать процесс созревания:

Cheese Aging Start Aging End Mature Age (Months)
Provolone January 19, 2022 March 17, 2022 1
Feta January 25, 2022 May 3, 2022 3
Monterey Jack January 27, 2022 October 11, 2022 8

Возраст зрелости (в месяцах) – это специальный столбец с выражением:

datetimeDiff([Aging Start], [Aging End], "month")

Для расчёта текущего возраста сыра в месяцах вы используете now в качестве второго параметра datetime, например:

Cheese Aging Start Aging End Mature Age (Months) Today Current Age (Months)
Provolone January 19, 2022 March 17, 2022 1 September 19, 2022 8
Feta January 25, 2022 May 3, 2022 3 September 19, 2022 7
Monterey Jack January 27, 2022 October 11, 2022 8 September 19, 2022 7
datetimeDiff([Aging Start], now, "month")

Для расчёта текущего возраста сыра в днях вы используете:

datetimeDiff([Aging Start], now, "day")

Допустимые типы данных

Типы данных Работает с datetimeDiff
Строка
Число
Дата Время
Условие
JSON

Мы используем «timestamp» и «datetime», чтобы говорить о любом временном типе данных, поддерживаемом Glarus BI. Для дополнительной информации о типах данных в вашей базе данных см. Руководство по типам данных.

Информация о типах данных также приведена в разделе обучения руководства Metabase (англ.).

Если ваши временные метки хранятся в базе данных в виде строк или чисел, администратор может преобразовать их в временные метки на странице "Метаданные таблиц".

Ограничения

На данный момент datetimeDiff недоступен для следующих баз данных:

  • Druid;
  • Google Analytics.

Связанные функции

В этом разделе рассматриваются функции и формулы, которые работают так же, как выражение datetimeDiff Glarus BI, с примечаниями о том, как выбрать лучший вариант для вашего случая использования.

SQL

Когда вы запускаете запрос с помощью конструктора запросов, Glarus BI преобразует ваши графические настройки запроса (фильтры, сводки и т.д.) в запрос и запускает этот запрос. против вашей базы данных, чтобы получить ваши результаты.

Если наши данные образца сыра хранятся в базе данных PostgreSQL:

SELECT DATE_PART('month', AGE(aging_end, aging_start)) AS mature_age_months
FROM cheese

эквивалентно выражению datetimeDiff в Glarus BI:

datetimeDiff([Aging Start], [Aging End], "month")

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

Таблицы

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

DATEDIF(B1, C1, "M")

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

datetimeDiff([Aging Start], [Aging End], "month")

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

Python

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

df['Mature Age (Months)'] = (df['Aging End'] - df['Aging Start']) / np.timedelta64(1, 'M')

аналогично:

datetimeDiff([Aging Start], [Aging End], "month")

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