DatetimeDiff

datetimeDiff 获取两个日期时间值之间的时间量,使用指定的时间单位。请注意,差值以整数单位计算(请参见以下示例)。

语法 示例
datetimeDiff(datetime1, datetime2, unit) datetimeDiff("2022-02-01", "2022-03-01", "month")
获取两个日期时间之间的差值(datetime2 减去 datetime 1),使用指定的时间单位。 1

参数

datetime1datetime2 可以是

  • 时间戳列的名称,
  • 返回 日期时间 的自定义表达式,或者
  • 格式为 "YYYY-MM-DD""YYYY-MM-DDTHH:MM:SS" 的字符串(如以上示例所示)。

unit 可以是以下任何一种

  • “year”
  • “quarter”
  • “month”
  • “week”
  • “day”
  • “hour”
  • “minute”
  • “second”

计算年龄

假设您是一位奶酪制造商,并且您想跟踪您的成熟过程

奶酪 开始陈酿 结束陈酿 成熟年龄(月)
意大利干酪 2022年1月19日 2022年3月17日 1
羊乳酪 2022年1月25日 2022年5月3日 3
蒙特雷杰克奶酪 2022年1月27日 2022年10月11日 8

成熟年龄(月) 是一个自定义列,其表达式为

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

要计算奶酪的当前月龄,请使用 now 作为第二个日期时间参数,如下所示

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

要计算奶酪的当前天龄,您可以使用

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

接受的数据类型

数据类型 适用于 datetimeDiff
字符串
数字
时间戳
布尔值
JSON

我们使用“时间戳”和“日期时间”来谈论 Metabase 支持的任何时间数据类型。有关 Metabase 中这些数据类型的更多信息,请参阅 时区

如果您的时间戳在数据库中存储为字符串或数字,则管理员可以从“表元数据”页面将它们转换为时间戳

限制

以下数据库目前无法使用 datetimeDiff

  • Druid

本节介绍的函数和公式与 Metabase datetimeDiff 表达式的工作方式相同,并附带有关如何为您的用例选择最佳选项的说明。

SQL

当您使用查询构建器运行问题时,Metabase 会将您的图形化查询设置(筛选器、汇总等)转换为查询,并针对您的数据库运行该查询以获取结果。

如果我们的奶酪示例数据存储在 PostgreSQL 数据库中

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

等效于 Metabase datetimeDiff 表达式

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

某些数据库(如 Snowflake 和 BigQuery)支持 DATEDIFFDATE_DIFF 等函数。有关更多信息,请查看我们的常用 SQL 参考指南列表。

电子表格

如果我们的奶酪示例数据位于电子表格中,“开始陈酿”位于 B 列,“结束陈酿”位于 C 列

DATEDIF(B1, C1, "M")

产生与以下结果相同的结果

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

是的,DATEDIF 看起来有点错误,但电子表格函数实际上是带有一个“f”的 DATEDIF(),而不是 DATEDIFF()

Python

假设奶酪示例数据位于名为 dfpandas 数据帧列中,您可以直接减去日期并使用 numpytimedelta64 将差值转换为月份

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

等效于

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

延伸阅读

阅读其他版本 Metabase 的文档。