Oracle正则表达式:提取VARCHAR字段中P_TYPE=>后的单引号内文本
Oracle中提取VARCHAR字段里P_TYPE=>后单引号内的文本
可以用两种方法实现需求,根据场景选择即可:
方法一:使用基础字符串函数(兼容所有Oracle版本)
通过INSTR定位关键位置,再用SUBSTR截取目标文本:
SELECT SUBSTR( your_column, -- 定位到P_TYPE=>'之后的起始位置 INSTR(your_column, 'P_TYPE=>''') + LENGTH('P_TYPE=>'''), -- 计算要截取的长度:从起始位置到下一个单引号的距离 INSTR(your_column, '''', INSTR(your_column, 'P_TYPE=>''') + LENGTH('P_TYPE=>''')) - (INSTR(your_column, 'P_TYPE=>''') + LENGTH('P_TYPE=>''')) ) AS extracted_text FROM your_table;
方法二:使用正则表达式(Oracle 10g及以上版本)
用REGEXP_SUBSTR直接匹配目标内容,写法更简洁:
SELECT -- 正则匹配P_TYPE=>'后的非单引号内容,返回第一个捕获组 REGEXP_SUBSTR(your_column, 'P_TYPE=>''([^'']+)''', 1, 1, NULL, 1) AS extracted_text FROM your_table;
补充说明
- 如果字段中存在多组
P_TYPE=>'xxx',可以调整REGEXP_SUBSTR的第四个参数(匹配序号),比如写1,2就能提取第二组的内容 - 若没有匹配到目标内容,结果会返回
NULL,可以用NVL函数替换成默认值,例如NVL(REGEXP_SUBSTR(...), '')
内容的提问来源于stack exchange,提问作者Kathleen Fleming
相关产品推荐
相关产品推荐

