Oracle正则表达式:使用多个分隔符拆分字符串
Oracle按多字符拆分字符串的正确解法
要同时按空格和横杠拆分字符串,你可以调整正则表达式,匹配非空格且非横杠的字符段,结合REGEXP_SUBSTR的参数提取对应位置的内容。
单条提取示例
针对输入字符串'123 456-789',分别提取三个部分的SQL如下:
- 提取第一个部分:
SELECT regexp_substr('123 456-789', '[^ -]+', 1, 1) FROM dual;
返回结果:123
- 提取第二个部分:
SELECT regexp_substr('123 456-789', '[^ -]+', 1, 2) FROM dual;
返回结果:456
- 提取第三个部分:
SELECT regexp_substr('123 456-789', '[^ -]+', 1, 3) FROM dual;
返回结果:789
正则表达式说明
[^ -]+表示匹配一个或多个既不是空格也不是横杠的字符,不管分隔符是空格还是横杠,都能精准定位到每个数字段。
批量拆分所有结果(返回多行)
如果需要一次性返回所有拆分后的结果,可以结合CONNECT BY实现:
SELECT regexp_substr('123 456-789', '[^ -]+', 1, LEVEL) AS split_result FROM dual CONNECT BY regexp_substr('123 456-789', '[^ -]+', 1, LEVEL) IS NOT NULL;
执行后会返回三行结果:123、456、789
内容的提问来源于stack exchange,提问作者NiallMitch14
相关产品推荐
相关产品推荐

