子串
substring
从某些文本中提取部分内容。此函数适用于清理具有一致格式的文本(或任何具有 字符串数据类型 的值)。
例如,substring
应适用于SKU号码、ISO代码和标准电子邮件地址等字符串。
语法 | 示例 |
---|---|
substring(text, position, length) |
substring("[email protected]", 1, 7) |
根据起始点(位置)和长度(字符数)提取文本的一部分。 | “user_id” |
参数
- 您的字符串中的第一个字符位于位置1。
- 您的子字符串的长度始终应该是正数。
从左侧获取子字符串
任务ID | 代理 |
---|---|
19951113006 | 006 |
20061114007 | 007 |
19640917008 | 008 |
代理 是一个自定义列,其表达式为
substring([Mission ID], 9, 3)
从右侧获取子字符串
您将使用公式而不是数字来指定位置,公式如下
1 + length([column]) - position_from_right
其中 position_from_right
是从右向左要计算的字符数。
任务ID | 代理 |
---|---|
19951113006 | 006 |
20061114007 | 007 |
19640917008 | 008 |
在此,代理 是一个自定义列,其表达式为
substring([Mission ID], (1 + length([Mission ID]) - 3), 3)
接受的数据类型
数据类型 | 与 substring 一起使用 |
---|---|
字符串 | ✅ |
数字 | ❌ |
时间戳 | ❌ |
布尔值 | ❌ |
JSON | ❌ |
限制
substring
通过计算固定数量的字符来提取文本。如果您需要根据更复杂的逻辑提取文本,请尝试使用 regexextract
。
如果您只需要清理文本周围的额外空白,您可以使用 trim
、ltrim
或 rtrim
表达式。
相关函数
本节介绍与 Metabase substring
表达式相同方式工作的函数和公式,并包含有关如何根据您的用例选择最佳选项的说明。
其他工具
Regexextract
如果您需要根据更具体的规则提取文本,请使用 regexextract。例如,您可以使用正则表达式模式获取代理ID,该模式找到“00”的最后出现(以及之后的所有内容)
regexextract([Mission ID], ".+(00.+)$")
应返回与以下相同的结果
substring([Mission ID], 9, 3)
SQL
当您使用 笔记本编辑器 运行问题查询时,Metabase 将将您的图形查询设置(筛选器、摘要等)转换为查询,并针对您的数据库运行该查询以获取结果。
如果我们的 示例数据 存储在 PostgreSQL 数据库中
SELECT
mission_id,
SUBSTRING(mission_id, 9, 3) AS agent
FROM
this_message_will_self_destruct;
与 Metabase substring
表达式等价
substring([Mission ID], 9, 3)
电子表格
如果我们的 示例数据 在电子表格中,其中“任务ID”位于列 A 中
=mid(A2,9,3)
与 Metabase substring
表达式相同
substring([Mission ID], 9, 3)
Python
假设 示例数据 位于名为 df
的 DataFrame 列中
df['Agent'] = df['Mission ID'].str.slice(8, 11)
与 Metabase substring
表达式执行相同操作
substring([Mission ID], 9, 3)
进一步阅读
阅读其他 Metabase 版本的文档。