时间差函数

datetimeDiff通过指定的时间单位来获取两个datetime值之间的时间量。请注意,差异是按整数单位计算的(请参见下面的示例)。

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

参数

datetime1datetime2可以是

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

单位可以是以下任何一种

  • “年”
  • “季度”
  • “月”
  • “周”
  • “天”
  • “小时”
  • “分钟”
  • “秒”

计算年龄

假设你是一位奶酪制造商,并希望跟踪你的成熟过程

奶酪 成熟开始 成熟结束 成熟年龄(月数)
Provolone 2022年1月19日 2022年3月17日 1
Feta 2022年1月25日 2022年5月3日 3
Monterey Jack 2022年1月27日 2022年10月11日 8

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

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

要计算奶酪的当前年龄(月数),您使用now作为第二个datetime参数,如下所示

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其他版本的文档。

想改进这些文档吗? 提出更改。