如何在Oracle中用正则表达式提取括号内数字并转为行数据
Oracle 正则提取数组字符串数字并转行级输出实现方案
适用场景
输入字符串为类JSON数组格式,如["1101124","1101123","123456"],需要提取括号内所有数字,每个数字单独占一行输出。
基础实现代码
SELECT REGEXP_SUBSTR(src_str, '\d+', 1, LEVEL) AS extracted_num FROM ( -- 替换下方语句为你的实际数据源,示例为模拟输入字符串 SELECT '["1101124","1101123","123456"]' AS src_str FROM dual ) t CONNECT BY REGEXP_SUBSTR(src_str, '\d+', 1, LEVEL) IS NOT NULL;
逻辑说明
REGEXP_SUBSTR函数的第二个参数\d+是正则规则,匹配连续1位及以上的数字片段LEVEL是Oracle递归查询的内置变量,配合CONNECT BY遍历所有匹配到的数字,直到没有新的匹配结果自动终止递归,实现将多个匹配项转成独立行输出
防误匹配优化版
如果你的源字符串除了数组部分之外其他位置也存在数字,可先提取中括号内部的内容再做匹配,避免误提取:
SELECT REGEXP_SUBSTR(arr_content, '\d+', 1, LEVEL) AS extracted_num FROM ( -- 第一步提取[]包裹的数组内容 SELECT REGEXP_SUBSTR(src_str, '\[(.*?)\]', 1, 1, NULL, 1) AS arr_content FROM ( -- 替换为实际数据源 SELECT '["1101124","1101123","123456"]' AS src_str FROM dual ) t ) t CONNECT BY REGEXP_SUBSTR(arr_content, '\d+', 1, LEVEL) IS NOT NULL;
输出示例
| EXTRACTED_NUM |
|---|
| 1101124 |
| 1101123 |
| 123456 |
内容的提问来源于stack exchange,提问作者Harish
相关产品推荐
相关产品推荐

