日期时间相减
datetimeSubtract
函数从一个日期时间值中减去一些时间单位。当处理标记有“开始”和“结束”的时间序列数据时,例如会话或订阅数据,您可能希望使用此函数。
语法 | 示例 |
---|---|
datetimeSubtract(column, amount, unit) |
datetimeSubtract("2021-03-25", 1, "month") |
从一个时间戳或日期值中减去指定数量的时间单位。 | 2021-02-25 |
参数
column
可以是以下任何一种
- 时间戳列的名称
- 返回 datetime 的自定义表达式
- 格式为
"YYYY-MM-DD"
或"YYYY-MM-DDTHH:MM:SS"
的字符串(如上例所示)
unit
可以是以下任何一种
- “年”
- “季度”
- “月”
- “日”
- “小时”
- “分钟”
- “秒”
- “毫秒”
数量
:
- 一个整数。您不能使用小数。例如,您不能减去“半年”(0.5)。
- 可能是一个负数:
datetimeSubtract("2021-03-25", -1, "month")
将返回2021-04-25
。
计算开始日期
假设您计划一个愉快的夜晚。您知道从一个地方到另一个地方需要30分钟,您需要计算出您需要何时离开才能到达您的每个预约
事件 | 到达时间 | 出发时间 |
---|---|---|
饮料 | 2022年11月12日 6:30 PM | 2022年11月12日 6:00 PM |
晚餐 | 2022年11月12日 8:00 PM | 2022年11月12日 7:30 PM |
跳舞 | 2022年11月13日 12:00 AM | 2022年11月12日 11:30 PM |
在这里,出发时间是一个具有以下表达式的自定义列
datetimeSubtract([Arrive By], 30, "minute")
检查当前datetime是否在区间内
假设您想检查当前datetime是否在开始日期和结束日期之间。假设“当前”datetime是11月12日 7:45 PM。
事件 | 到达时间 | 出发时间 | 我在路上 |
---|---|---|---|
饮料 | 2022年11月12日 6:30 PM | 2022年11月12日 6:00 PM | 否 |
晚餐 | 2022年11月12日 8:00 PM | 2022年11月12日 7:30 PM | 是 |
跳舞 | 2022年11月13日 12:00 AM | 2022年11月12日 11:30 PM | 否 |
出发时间是一个具有以下表达式的自定义列
datetimeSubtract([Arrive By], 30, "minute")
我在路上使用case检查当前datetime (now) 是否在到达时间和出发时间的datetime之间
case(between(now, [Depart At], [Arrive By]), "Yes", "No")
接受的数据类型
数据类型 | 与datetimeSubtract 一起工作 |
---|---|
字符串 | ❌ |
数字 | ❌ |
时间戳 | ✅ |
布尔值 | ❌ |
JSON | ❌ |
我们使用“时间戳”和“datetime”来讨论Metabase支持的所有时间数据类型。有关Metabase中这些数据类型的更多信息,请参阅时区。
如果您的时间戳以字符串或数字的形式存储在数据库中,管理员可以从表元数据页面将它们转换为时间戳。
限制
如果您正在使用MongoDB,则datetimeSubtract
只能在5.0及以上版本上工作。
相关函数
本节涵盖了与Metabase datetimeSubtract
表达式以相同方式工作的函数和公式,并说明了如何根据您的用例选择最佳选项。
其他工具
datetimeAdd
datetimeSubtract
和datetimeAdd
可以互换,因为您可以为amount
使用负数。我们可以为我们的事件示例使用任何表达式,但您应尽量避免“双重否定”(例如减去一个负数)。
datetimeAdd([Arrive By], -30, "minute")
等同于
datetimeSubtract([Arrive By], 30, "minute")
SQL
当您使用查询构建器运行问题时,Metabase会将您的图形查询设置(过滤器、摘要等)转换为查询,并运行该查询以获取结果。
如果我们的事件示例数据存储在PostgreSQL数据库中
SELECT arrive_by - INTERVAL '30 minutes' AS depart_at
FROM events
等同于Metabase datetimeSubtract
表达式
datetimeSubtract([Arrive By], 30, "minute")
电子表格
假设事件示例数据在一个电子表格中,其中“到达时间”在A列中具有datetime格式,电子表格函数
A:A - 30/(60*24)
产生的结果与
datetimeSubtract([Arrive By], 30, "minute")
大多数电子表格要求您为不同的时间单位使用不同的计算(例如,您需要使用不同的计算从日期中减去“天”)。datetimeSubtract
使您可以轻松地将所有这些函数转换为单一一致的语法。
Python
如果我们的事件样本数据位于名为df
的pandas
数据框列中,您可以导入datetime
模块并使用timedelta
函数
df['Depart At'] = df['Arrive By'] - datetime.timedelta(minutes=30)
相当于
datetimeSubtract([Arrive By], 30, "minute")
进一步阅读
阅读Metabase其他版本文档。