You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用regexp_substr()提取字符串中特定单词后的数字

用REGEXP_SUBSTR提取serial后的数字

针对你给出的字符串格式,要提取serial后的数字,下面是不同主流数据库对应的SQL写法:

Oracle

直接利用REGEXP_SUBSTR的捕获组提取功能:

SELECT REGEXP_SUBSTR('top-level:volume(1):semifinished(21491628):serial(21441769)', 'serial\((\d+)\)', 1, 1, NULL, 1) AS serial_number
FROM dual;
  • 正则说明:serial\((\d+)\)精准匹配serial(数字)的结构,(\d+)把数字部分标记为捕获组;最后一个参数1指定提取第1个捕获组的内容。

PostgreSQL

可以用正向预查定位数字位置,或者提取捕获组:

方法1:正向预查

SELECT REGEXP_SUBSTR('top-level:volume(1):semifinished(21491628):serial(21441769)', '(?<=serial\()\d+') AS serial_number;
  • 正则说明:(?<=serial\()确保匹配的数字前面是serial(,\d+匹配所有连续数字。

方法2:捕获组提取

SELECT (REGEXP_MATCHES('top-level:volume(1):semifinished(21491628):serial(21441769)', 'serial\((\d+)\)'))[1] AS serial_number;

MySQL 8.0+

MySQL 8.0及以上版本支持REGEXP_SUBSTR,注意转义符要用双反斜杠:

SELECT REGEXP_SUBSTR('top-level:volume(1):semifinished(21491628):serial(21441769)', '(?<=serial\\()\\d+') AS serial_number;

如果是从表中查询,把示例里的字符串替换成你的列名即可,比如Oracle环境下查询表your_table的target_col列:

SELECT REGEXP_SUBSTR(target_col, 'serial\((\d+)\)', 1, 1, NULL, 1) AS serial_number
FROM your_table;

内容的提问来源于stack exchange,提问作者Drake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:26:12