如何在Oracle中使用substr/instr按指定关键字拆分字符串
解决方案:Oracle按关键字提取字符串对应值
针对你的需求,不需要依赖逗号的位置,直接用Oracle的REGEXP_SUBSTR函数按关键字匹配提取对应值即可,以下是实现代码:
SELECT criteria, -- 提取SampleNum对应的值 REGEXP_SUBSTR(criteria, 'SampleNum: ''([^'']+)''', 1, 1, NULL, 1) AS SampleNum, -- 提取SampleState对应的值 REGEXP_SUBSTR(criteria, 'SampleState: ''([^'']+)''', 1, 1, NULL, 1) AS SampleState, -- 提取Action对应的值 REGEXP_SUBSTR(criteria, 'Action: ''([^'']+)''', 1, 1, NULL, 1) AS Action, -- 提取CollectionReason对应的值 REGEXP_SUBSTR(criteria, 'CollectionReason: ''([^'']+)''', 1, 1, NULL, 1) AS CollectionReason FROM table1;
代码说明:
REGEXP_SUBSTR的参数逻辑:- 目标列:
criteria - 匹配正则:
'关键字: ''([^'']+)''',其中[^'']+表示匹配单引号之间的所有非单引号字符,精准捕获值的部分 - 起始位置:
1(从字符串开头开始匹配) - 匹配次数:
1(取第一次匹配的结果) - 匹配选项:
NULL(使用默认匹配规则) - 分组编号:
1(返回正则中括号()包裹的分组内容,也就是我们要的具体值)
- 目标列:
这个方法的优势是不依赖关键字在字符串中的顺序,不管这些键值对怎么排列,都能精准提取到对应的值,完美解决你原来按逗号截取的局限性。
内容的提问来源于stack exchange,提问作者zephyr223
相关产品推荐
相关产品推荐

