Oracle SQL:提取字符串中指定语句间的文本内容
Oracle 正则提取指定区间文本解决方案
没问题,我来帮你搞定这个正则提取的需求!下面是调整后的查询语句,能精准提取你要的三个区间内容:
SELECT -- 提取 'Pd to LOOK:' 到 'Pd to SEE (swap):' 之间的内容 REGEXP_SUBSTR(myColumn, 'Pd to LOOK:\s*(.*?)\s*Pd to SEE \(swap\):', 1, 1, NULL, 1) AS look_products, -- 提取 'Pd to SEE (swap):' 到 'Pd to SEE (extra):' 之间的内容 REGEXP_SUBSTR(myColumn, 'Pd to SEE \(swap\):\s*(.*?)\s*Pd to SEE \(extra\):', 1, 1, NULL, 1) AS swap_products, -- 提取 'Pd to SEE (extra):' 到 'Contact me: 123456' 之间的内容 REGEXP_SUBSTR(myColumn, 'Pd to SEE \(extra\):\s*(.*?)\s*Contact me: 123456', 1, 1, NULL, 1) AS extra_products FROM mytable;
关键细节说明:
- 转义特殊字符:正则里的
()是特殊元字符,所以要加反斜杠\转义成\(swap\),确保匹配到原文里的括号。 - \s*匹配空白:用来忽略目标关键词前后的空格,避免因为空格差异导致匹配失败。
- .*?非贪婪匹配:这个设置会让正则匹配到第一个终止关键词就停止,不会过度抓取后面的内容,保证提取的准确性。
- 第6个参数1:指定返回正则表达式中第1个捕获组(也就是
()包裹的部分)的内容,这正是我们要的区间文本。
用你提供的示例数据测试,输出结果完全符合预期:
- look_products:
NOKIA/HMD; APPLE; MI; - swap_products:
SAMSUNG; VIVO; - extra_products:
MOKA;
内容的提问来源于stack exchange,提问作者Praveen Verma
相关产品推荐
相关产品推荐

