如何在Oracle SQL中使用regexp_substr按多字符分隔符拆分字符串?
Oracle SQL 按多字符分隔符正确拆分字符串
你的问题出在正则表达式的写法上:[^--->]+是否定字符集,它会把-和>这两个字符单独当作分隔符,所以a-b里的单个短横线被误判,导致拆分结果不符合预期。要实现按完整的--->分隔符拆分,需要调整正则逻辑,匹配整个分隔符而非单个字符。
正确的SQL语句
select regexp_substr('a-b--->d--->e f', '(.*?)(--->|$)', 1, 1, null, 1) col1, regexp_substr('a-b--->d--->e f', '(.*?)(--->|$)', 1, 2, null, 1) col2, regexp_substr('a-b--->d--->e f', '(.*?)(--->|$)', 1, 3, null, 1) col3, regexp_substr('a-b--->d--->e f', '(.*?)(--->|$)', 1, 4, null, 1) col4 from dual
正则表达式说明
(.*?):非贪婪模式匹配任意字符(不含换行),直到遇到后续的分隔符或字符串结尾,避免过度匹配(--->|$):指定完整的分隔符--->,或者匹配字符串结束位置(处理最后一段无分隔符的内容)- 最后一个参数
1:表示返回第一个捕获组(.*?)的内容,也就是我们需要的拆分片段
执行结果
| col1 | col2 | col3 | col4 |
|---|---|---|---|
| a-b | d | e f |
内容的提问来源于stack exchange,提问作者CaptainX
相关产品推荐
相关产品推荐

