datetimeSubtract
datetimeSubtract 函数用于从日期时间值中减去一定的时间单位。当处理时间序列数据时,例如会话或订阅数据,这些数据通常由“开始”和“结束”标记,您可能希望使用此函数。
| 语法 | 示例 |
|---|---|
datetimeSubtract(column, amount, unit) |
datetimeSubtract("2021-03-25", 1, "month") |
| 获取时间戳或日期值,并从中减去指定的时间单位数。 | 2021-02-25 |
参数
列 可以是以下任何一种
- 时间戳列的名称,
- 返回 日期时间 的自定义表达式,或者
- 格式为
"YYYY-MM-DD"或"YYYY-MM-DDTHH:MM:SS"的字符串(如上例所示)。
单位 可以是以下任何一种
- “年”
- “季度”
- “月”
- “日”
- “小时”
- “分钟”
- “秒”
- “millisecond”
amount:
- 一个整数。不能使用分数。例如,不能减去“半年”(0.5)。
- 可以是负数:
datetimeSubtract("2021-03-25", -1, "month")将返回2021-04-25。
计算开始日期
假设您正在计划一个有趣的夜晚外出。您知道在各个地点之间需要 30 分钟,您需要弄清楚您必须在什么时间离开才能到达您的每个预订地点。
| 事件 | 最晚到达时间 | 出发时间 |
|---|---|---|
| 饮品 | 2022年11月12日晚上6:30 | 2022年11月12日晚上6:00 |
| 晚餐 | 2022年11月12日晚上8:00 | 2022年11月12日晚上7:30 |
| 跳舞 | 2022年11月13日午夜12:00 | 2022年11月12日晚上11:30 |
在这里,Depart At 是一个自定义列,其表达式为:
datetimeSubtract([Arrive By], 30, "minute")
检查当前日期时间是否在某个时间间隔内
假设您想检查当前日期时间是否位于 开始日期 和结束日期之间。假设“当前”日期时间是 11 月 12 日晚上 7:45。
| 事件 | 最晚到达时间 | 出发时间 | 在路上 |
|---|---|---|---|
| 饮品 | 2022年11月12日晚上6:30 | 2022年11月12日晚上6:00 | 否 |
| 晚餐 | 2022年11月12日晚上8:00 | 2022年11月12日晚上7:30 | 是 |
| 跳舞 | 2022年11月13日午夜12:00 | 2022年11月12日晚上11:30 | 否 |
Depart At 是一个自定义列,其表达式为:
datetimeSubtract([Arrive By], 30, "minute")
On My Way 使用 case 来检查当前日期时间 (now) 是否 在 Arrive By 和 Depart At 的日期时间之间。
case(between(now, [Depart At], [Arrive By]), "Yes", "No")
支持的数据类型
| 数据类型 | 与 datetimeSubtract 配合使用 |
|---|---|
| 字符串是 | ❌ |
| 数字 | ❌ |
| 时间戳 | ✅ |
| 布尔值 | ❌ |
| JSON | ❌ |
我们使用“时间戳”和“日期时间”来指代 Metabase 支持的任何时间数据类型。有关 Metabase 中这些数据类型的更多信息,请参阅 时区。
如果您的时间戳在数据库中以字符串或数字形式存储,管理员可以从表元数据页面将其转换为时间戳。
限制
如果您使用的是 MongoDB,datetimeSubtract 仅适用于 5 及更高版本。
相关函数
本节介绍与 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")
电子表格
假设 活动样本数据 存储在电子表格中,其中“Arrive By”位于列 A,并具有日期时间格式,则电子表格函数
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 的文档。