mysql中regexp_substr函数的使用

17次阅读

mysql 8.0 及以上版本支持 REGEXP_SUBSTR 函数,用于提取匹配正则的子串。语法为 REGEXP_SUBSTR(str, pattern, pos, occurrence, match_type),可指定起始位置和匹配次数。示例包括提取数字、邮箱、括号内容及特定前缀后的值,适用于文本清洗与数据提取场景。

mysql 中 regexp_substr 函数的使用

MySQL 在 8.0 版本之后才引入了 REGEXP_SUBSTR 函数,用于从 字符串 中提取匹配 正则表达式 的子串。如果你使用的是 MySQL 8.0 或更高版本,就可以使用这个函数来实现灵活的文本提取。

基本语法

REGEXP_SUBSTR(str, pattern) 返回在字符串 str 中第一个匹配 正则表达式 pattern 的子串。如果没有匹配项,则返回 NULL

常见用法示例

1. 提取数字 从字符串中提取连续的数字:

select REGEXP_SUBSTR(‘ 订单编号:12345,金额:678’, ‘[0-9]+’); 结果:12345(提取第一个数字序列)

2. 提取 邮箱 地址 假设字段包含一段文本,想提取其中的邮箱:

SELECT REGEXP_SUBSTR(‘ 联系方式:admin@example.com,电话:12345’, ‘[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}’); 结果:admin@example.com

3. 提取括号内的内容 提取圆括号中的文字:

SELECT REGEXP_SUBSTR(‘ 这是测试 (内部内容) 示例 ’, ‘([^)]+)’); 结果:(内部内容) 若想去掉括号,可结合其他函数处理。

4. 提取特定前缀后的值 比如提取 “ID:” 后面的数字:

SELECT REGEXP_SUBSTR(‘ 用户 ID:98765,状态:激活 ’, ‘ID:[0-9]+’); 结果:ID:98765 进一步提取纯数字可写成:
SELECT REGEXP_SUBSTR(‘ 用户 ID:98765,状态:激活 ’, ‘[0-9]+’, 1, 2); 这里第四个参数表示“第二次出现”,因为第一个数字可能是前面的编号。

支持起始位置和匹配次序(MySQL 8.0.4+)

REGEXP_SUBSTR(str, pattern, pos, occurrence, match_type)pos:开始搜索的位置(默认为 1)– occurrence:第几次匹配(默认为 1)– match_type:匹配模式,如 ‘i’ 不区分大小写,’c’ 区分大小写,’m’ 多行模式等

示例:跳过第一个数字,提取第二个:

mysql 中 regexp_substr 函数的使用

SpeakingPass- 打造你的专属雅思口语语料

使用 chatGPT 帮你快速备考雅思口语,提升分数

mysql 中 regexp_substr 函数的使用25

查看详情 mysql 中 regexp_substr 函数的使用

SELECT REGEXP_SUBSTR(‘ 价格:100 元,数量:5 个 ’, ‘[0-9]+’, 1, 2); 结果:5

注意事项

– 该函数在 MySQL 5.7 及更早版本中不可用。如果需要类似功能,可通过存储函数或程序端处理模拟。– 正则表达式不支持所有 PCRE 特性,使用时需遵循 MySQL 的正则语法(基于 Henry Spencer 的正则库)。– 若提取结果可能为空,建议配合 IFNULL 处理 NULL 值。

基本上就这些。合理使用 REGEXP_SUBSTR 能大幅提升文本 数据清洗 和提取效率,特别是在日志分析、数据导入等场景中非常实用。

站长
版权声明:本站原创文章,由 站长 2025-11-01发表,共计1334字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources