DatetimeDiff
datetimeDiff
获取两个日期时间值之间的时间量,使用指定的时间单位。请注意,差值以整数单位计算(请参见以下示例)。
语法 | 示例 |
---|---|
datetimeDiff(datetime1, datetime2, unit) |
datetimeDiff("2022-02-01", "2022-03-01", "month") |
获取两个日期时间之间的差值(datetime2 减去 datetime 1),使用指定的时间单位。 | 1 |
参数
datetime1
和 datetime2
可以是
- 时间戳列的名称,
- 返回 日期时间 的自定义表达式,或者
- 格式为
"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)支持 DATEDIFF
或 DATE_DIFF
等函数。有关更多信息,请查看我们的常用 SQL 参考指南列表。
电子表格
如果我们的奶酪示例数据位于电子表格中,“开始陈酿”位于 B 列,“结束陈酿”位于 C 列
DATEDIF(B1, C1, "M")
产生与以下结果相同的结果
datetimeDiff([Aging Start], [Aging End], "month")
是的,DATEDIF
看起来有点错误,但电子表格函数实际上是带有一个“f”的 DATEDIF()
,而不是 DATEDIFF()
。
Python
假设奶酪示例数据位于名为 df
的 pandas
数据帧列中,您可以直接减去日期并使用 numpy
的 timedelta64
将差值转换为月份
df['Mature Age (Months)'] = (df['Aging End'] - df['Aging Start']) / np.timedelta64(1, 'M')
等效于
datetimeDiff([Aging Start], [Aging End], "month")
延伸阅读
阅读其他版本 Metabase 的文档。