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

Oracle中如何用REGEXP_SUBSTR拆分字符串并返回多行数据

问题分析与解决

问题原因

你写的正则表达式^\d+(,\d+)*$是用来匹配整个完整的逗号分隔数字串的,它的逻辑是:以数字开头,后续可以重复任意次「逗号+数字」的组合。所以只有当level=1时,能匹配到整个字符串;level=2、level=3时,找不到对应位置的匹配项,返回空值。

正确写法

要提取每个逗号分隔的数字段,需要把正则改成匹配单个数字段的模式,比如用[^,]+(匹配任意非逗号的字符序列,通用型强)或者\d+(仅匹配数字,适合纯数字场景)。修改后的SQL如下:

with rws as (
  select '143,3344,40099' str from dual
)
select regexp_substr(
         str,
         '[^,]+',
         1,
         level
       ) value
from rws
connect by level <= length(str) - length(replace(str, ',')) + 1;

执行后会返回三行独立的数字:

  • 143
  • 3344
  • 40099

另外注意,原SQL里直接硬编码了目标字符串,改成引用CTE里的str字段更规范,也方便后续修改字符串内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:42:34