如何使用REGEXP_SUBSTR提取字符串中所有C开头的编码?
用REGEXP_SUBSTR提取以C开头的编码方案
针对你的需求,这里提供仅使用REGEXP_SUBSTR(结合Oracle层级查询与聚合函数)的实现方式,最终得到逗号分隔的目标编码:
完整SQL语句
SELECT LISTAGG(REGEXP_SUBSTR(target_str, 'C[^,]+', 1, LEVEL), ',') WITHIN GROUP (ORDER BY LEVEL) AS c_codes FROM ( -- 替换为你的原查询结果,此处直接使用目标字符串示例 SELECT 'B211-C342,B211-C767,B211-C768,B211-C769,B211-C999' AS target_str FROM dual ) CONNECT BY LEVEL <= REGEXP_COUNT(target_str, 'C[^,]+');
关键部分说明
- 正则模式
C[^,]+:匹配以C开头、后续所有非逗号的字符,精准定位每个目标编码。 REGEXP_SUBSTR(..., 1, LEVEL):通过LEVEL参数循环提取第N个匹配项,配合CONNECT BY生成对应数量的行。REGEXP_COUNT:统计字符串中符合模式的匹配次数,控制层级循环的次数,避免生成多余行。LISTAGG:将多行提取的编码拼接成逗号分隔的单一字符串,得到预期格式的结果。
执行上述语句后,输出结果即为:C342,C767,C768,C769,C999
内容的提问来源于stack exchange,提问作者Alagu Saravanan Perumal
相关产品推荐
相关产品推荐

