datetimeAdd
datetimeAdd 函数用于在日期时间值上添加指定的时间单位。当您处理带有“开始”和“结束”标记的时间序列数据(例如会话或订阅数据)时,此函数非常有用。
| 语法 | 示例 |
|---|---|
datetimeAdd(column, amount, unit) |
datetimeAdd("2021-03-25", 1, "month") |
| 将指定数量的时间单位添加到时间戳或日期值。 | 2021-04-25 |
参数
列 可以是以下任何一种
- 时间戳列的名称,
- 返回 日期时间 的自定义表达式,或者
- 格式为
"YYYY-MM-DD"或"YYYY-MM-DDTHH:MM:SS"的字符串(如上面的示例所示)。
单位 可以是以下任何一种
- “年”
- “季度”
- “月”
- “日”
- “小时”
- “分钟”
- “秒”
- “millisecond”
amount:
- 整数。您不能使用分数。例如,您不能添加“半年”(0.5)。
- 可以是负数:
datetimeAdd("2021-03-25", -1, "month")将返回2021-04-25。
计算结束日期
假设您是一位咖啡鉴赏家,您想跟踪咖啡豆的新鲜度
| 咖啡 | 开封日期 | 完成日期 |
|---|---|---|
| DAK Honey Dude | 2022年10月31日 | 2022年11月14日 |
| NO6 Full City Espresso | 2022年11月7日 | 2022年11月21日 |
| Ghost Roaster Giakanja | 2022年11月27日 | 2022年12月11日 |
在此,**完成日期** 是一个自定义列,其表达式为
datetimeAdd([Opened On], 14, 'day')
检查当前日期时间是否在某个区间内
假设您想检查今天的日期是否在开始日期和结束日期之间。假设“今天”是2022年12月1日。
| 咖啡 | 开封日期 | 完成日期 | 今天仍然新鲜 |
|---|---|---|---|
| DAK Honey Dude | 2022年10月31日 | 2022年11月14日 | 否 |
| NO6 Full City Espresso | 2022年11月7日 | 2022年11月21日 | 否 |
| Ghost Roaster Giakanja | 2022年11月27日 | 2022年12月11日 | 是 |
**完成日期** 是一个自定义列,其表达式为
datetimeAdd([Opened On], 14, 'day')
**今天仍然新鲜** 使用 case 语句检查当前日期(now)是否在 **开封日期** 和 **完成日期** 之间(between)。
case(between(now, [Opened On], [Finish By]), "Yes", "No")
支持的数据类型
| 数据类型 | 与 datetimeAdd 配合使用 |
|---|---|
| 字符串是 | ❌ |
| 数字 | ❌ |
| 时间戳 | ✅ |
| 布尔值 | ❌ |
| JSON | ❌ |
我们使用“时间戳”和“日期时间”来指代 Metabase 支持的任何时间数据类型。有关 Metabase 中这些数据类型的更多信息,请参阅 时区。
如果您的时间戳在数据库中以字符串或数字形式存储,管理员可以从表元数据页面将其转换为时间戳。
限制
如果您使用的是 MongoDB,datetimeAdd 仅在 5 及以上版本中可用。
相关函数
本节介绍了与 Metabase datetimeAdd 表达式功能相同的函数和公式,并附有关于如何为您的用例选择最佳选项的说明。
其他工具
datetimeSubtract
datetimeSubtract 和 datetimeAdd 是可互换的,因为您可以使用负数作为 amount。通常最好避免双重否定(例如减去一个负数)。
datetimeSubtract([Opened On], -14, "day")
与...相同
datetimeAdd([Opened On], 14, "day")
SQL
当您使用查询构建器运行查询时,Metabase 会将您的图形查询设置(过滤器、摘要等)转换为查询,并针对您的数据库运行该查询以获取结果。
如果我们的咖啡样本数据存储在 PostgreSQL 数据库中
SELECT opened_on + INTERVAL '14 days' AS finish_by
FROM coffee
等同于 Metabase 的 datetimeAdd 表达式
datetimeAdd([Opened On], 14, "day")
电子表格
如果我们的咖啡样本数据在电子表格中,“开封日期”在 A 列,且格式为日期,则电子表格函数
A:A + 14
产生与以下结果相同的结果
datetimeAdd([Opened On], 14, "day")
大多数电子表格工具需要为不同的时间单位使用不同的函数(例如,您需要使用不同的函数来将“月”添加到日期)。datetimeAdd 使您可以轻松地将所有这些函数转换为单一的、一致的语法。
Python
假设咖啡样本数据在一个名为 df 的 pandas 数据帧列中,您可以导入 datetime 模块并使用 timedelta 函数。
df['Finish By'] = df['Opened On'] + datetime.timedelta(days=14)
等同于
datetimeAdd([Opened On], 14, "day")
延伸阅读
阅读其他版本的 Metabase 的文档。