DatetimeSubtract
datetimeSubtract
接受一个日期时间值,并从中减去一些时间单位。您可能希望在处理带有“开始”和“结束”标记(例如会话或订阅数据)的时间序列数据时使用此函数。
语法 | 示例 |
---|---|
datetimeSubtract(column, amount, unit) |
datetimeSubtract("2021-03-25", 1, "month") |
接受时间戳或日期值,并从中减去指定数量的时间单位。 | 2021-02-25 |
参数
column
可以是以下任何一种:
- 时间戳列的名称,
- 返回日期时间的自定义表达式,或者
- 格式为
"YYYY-MM-DD"
或"YYYY-MM-DDTHH:MM:SS"
的字符串(如上例所示)。
unit
可以是以下任何一种:
- “year”(年)
- “quarter”(季度)
- “month”(月)
- “day”(日)
- “hour”(小时)
- “minute”(分钟)
- “second”(秒)
- “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 |
此处,出发时间 是一个自定义列,其表达式为
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 | 否 |
出发时间 是一个自定义列,其表达式为
datetimeSubtract([Arrive By], 30, "minute")
在路上 使用 case 来检查当前日期时间 (now) 是否在 到达时间 和 出发时间 的日期时间之间
case(between(now, [Depart At], [Arrive By]), "Yes", "No")
支持的数据类型
数据类型 | 适用于 datetimeSubtract |
---|---|
字符串 | ❌ |
数字 | ❌ |
时间戳 | ✅ |
布尔值 | ❌ |
JSON | ❌ |
我们使用“timestamp”和“datetime”来指代 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")
电子表格
假设事件示例数据位于电子表格中,其中“到达时间”在 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 版本的文档。