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

Oracle中REGEXP_REPLACE提取问号前目标数字的正确方法

需求说明

从指定格式的字符串中,提取问号?前紧邻的连续数字段,示例如下:

  • 输入值:abc#95988287?3008009095
  • 预期返回结果:95988287
原有写法错误原因

之前尝试的SQL语句如下:

SELECT REGEXP_REPLACE('abc#95988287?3008009095', '\?[1,0,2,3,4,5,6,7,8,9]', '')
  FROM dual;

运行后得到错误结果abc#95988287008009095,问题点有两个:

  • 正则匹配范围错误:'\?[1,0,2,3,4,5,6,7,8,9]'仅匹配问号和问号后的第一个数字,替换时只删除了这两个字符,既没有去掉问号前的非数字前缀,也没有删除问号后剩余的所有内容
  • 字符组写法错误:方括号内的逗号会被识别为待匹配的普通字符,属于无效写法,数字匹配直接用\d或者[0-9]即可,不需要枚举单个数字还加逗号分隔
正确REGEXP_REPLACE写法

通过正则捕获组直接提取目标内容即可,正则规则匹配整个字符串的三段结构,仅保留问号前紧邻的连续数字段:

  • ^.*?:非贪婪匹配字符串开头到目标数字段之前的所有非目标内容
  • (\d+):捕获问号前紧邻的连续数字,也就是需要提取的目标值
  • \?.*$:匹配问号本身以及问号后到字符串结尾的所有非目标内容

替换时直接用第一个捕获组的内容替换整个原字符串,正确SQL如下:

SELECT REGEXP_REPLACE(
    'abc#95988287?3008009095',
    '^.*?(\d+)\?.*$',
    '\1'
  ) AS target_number
FROM dual;

执行上述语句即可返回预期结果95988287。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:33:14