时间差函数
datetimeDiff
通过指定的时间单位来获取两个datetime值之间的时间量。请注意,差异是按整数单位计算的(请参见下面的示例)。
语法 | 示例 |
---|---|
datetimeDiff(datetime1, datetime2, 单位) |
datetimeDiff("2022-02-01", "2022-03-01", "month") |
使用指定的时间单位获取两个datetime之间的差异(datetime2减去datetime 1)。 | 1 |
参数
datetime1
和datetime2
可以是
- 时间戳列的名称,
- 返回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,支持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其他版本的文档。