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

Oracle中如何拆分含分隔符的多字符串?

在Oracle中拆分带双引号包裹的字符串(支持元素含分号)

针对你需要拆分格式如"a","b","c;d"这类字符串的需求,以下是几种可靠的解决方案,能避免元素内部包含分号时的拆分错误:

方法1:使用正则表达式精准匹配双引号内内容

通过非贪婪正则匹配双引号之间的完整内容,忽略内部的分号、逗号等符号:

WITH input_data AS (
    SELECT '"a","b","c;d","e"' AS target_str FROM dual
)
SELECT REPLACE(REGEXP_SUBSTR(target_str, '(".*?")', 1, level, 'i'), '"', '') AS split_result
FROM input_data
CONNECT BY REGEXP_SUBSTR(target_str, '(".*?")', 1, level) IS NOT NULL;

正则说明:(".*?")会从第一个双引号开始,匹配到最近的下一个双引号结束,确保双引号内的完整内容被作为单个元素提取,最后用REPLACE去掉前后的双引号。

方法2:使用XMLTABLE(Oracle 11g+)

将字符串转换为XML可识别的格式,再通过XMLTABLE解析:

WITH input_data AS (
    SELECT '"a","b","c;d","e"' AS target_str FROM dual
)
SELECT TRIM('"' FROM x.column_value) AS split_result
FROM input_data,
     XMLTABLE(REPLACE(target_str, '","', '","')) x;

方法3:使用JSON_TABLE(Oracle 12c+)

把目标字符串包裹成JSON数组格式,利用JSON的特性直接解析:

WITH input_data AS (
    SELECT '"a","b","c;d","e"' AS target_str FROM dual
)
SELECT j.split_result
FROM input_data,
     JSON_TABLE(('[' || target_str || ']'), '$[*]' COLUMNS split_result VARCHAR2(100) PATH '$') j;

这种方式最简洁,JSON原生支持字符串内部的特殊字符,无需额外处理正则逻辑。

原方法出错的原因

你之前使用的REGEXP_SUBSTR('a;b;c;d','[^;]+',1,level)是按分号作为分隔符,匹配所有非分号的字符。但当元素本身包含分号(比如"c;d")时,该正则会将"c和d"拆成两个独立元素,甚至因引号干扰导致匹配异常,最终出现无记录或错误拆分的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:12:06