Oracle中使用REGEXP_SUBSTR提取指定标识后内容的技术求助
Oracle 字符串提取解决方案
针对你需要从指定字符串中提取Book :、Asset Number :等字段后续内容的需求,利用Oracle的REGEXP_SUBSTR结合正则捕获组可以精准实现。以下是具体实现方案:
单个字段提取示例
提取Book对应值
REGEXP_SUBSTR(xal.DESCRIPTION, 'Book : (.*?)(, |$)', 1, 1, NULL, 1) AS book_value
- 正则逻辑:
Book :匹配固定前缀,(.*?)非贪婪捕获后续内容(直到遇到,或字符串结尾),最后一个参数1指定提取第一个捕获组的内容。
提取Asset Number对应值
REGEXP_SUBSTR(xal.DESCRIPTION, 'Asset Number : (.*?)(, |$)', 1, 1, NULL, 1) AS asset_number_value
提取Transaction Number对应值
REGEXP_SUBSTR(xal.DESCRIPTION, 'Transaction Number : (.*?)(, |$)', 1, 1, NULL, 1) AS transaction_number_value
完整查询语句
SELECT REGEXP_SUBSTR(xal.DESCRIPTION, 'Book : (.*?)(, |$)', 1, 1, NULL, 1) AS book, REGEXP_SUBSTR(xal.DESCRIPTION, 'Asset Number : (.*?)(, |$)', 1, 1, NULL, 1) AS asset_number, REGEXP_SUBSTR(xal.DESCRIPTION, 'Transaction Number : (.*?)(, |$)', 1, 1, NULL, 1) AS transaction_number FROM your_table xal;
关键说明
- 你原语句使用的
[^_]+是按下划线分割字符串,完全不匹配当前需求,必须替换为匹配目标字段前缀的正则表达式。 - 非贪婪匹配
.*?能避免误捕获后续其他字段内容,确保只提取当前字段到下一个分隔符的内容。 - 如果存在字段缺失的情况,函数会返回
NULL,可根据业务需求用NVL函数做默认值处理。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

