Oracle使用REGEXP_SUBSTR提取SQL中带点分隔的字段字符串
Oracle 用REGEXP_SUBSTR提取SQL中「表别名.字段名」格式标识符实现
需求场景
从存储SQL语句的文本中,精准提取包含半角点号、符合表别名.字段名格式的标识符,示例输入SQL如下:
select FRL_ATTRIBUTE_DESCRIPTION from FRL_ATTRIBUTES WHERE FRL_ATTRIBUTE_LEVEL =9 AND FRL_Lines_PL.FRL_ATTRIBUTE_09 = FRL_ATTRIBUTE
预期提取结果:
FRL_Lines_PL.FRL_ATTRIBUTE_09
实现代码
直接调用REGEXP_SUBSTR函数搭配适配正则即可,针对示例的测试代码:
SELECT REGEXP_SUBSTR( 'select FRL_ATTRIBUTE_DESCRIPTION from FRL_ATTRIBUTES WHERE FRL_ATTRIBUTE_LEVEL =9 AND FRL_Lines_PL.FRL_ATTRIBUTE_09 = FRL_ATTRIBUTE', '[A-Za-z0-9_]+\.[A-Za-z0-9_]+' ) AS target_col FROM dual;
执行上述代码即可得到预期输出。
规则说明
- 所用正则
[A-Za-z0-9_]+\.[A-Za-z0-9_]+的匹配逻辑:识别连续的数据库合法标识符字符(字母、数字、下划线),中间包含1个半角点号,点号前后均为合法标识符片段,刚好匹配「表别名.字段名」的格式 - 如果待处理的SQL文本中存在多个符合格式的标识符,可以通过
REGEXP_SUBSTR的第四个参数指定提取第几个匹配项,参数值从1开始计数。例如要提取文本中第1个符合格式的内容,写法如下:
REGEXP_SUBSTR(存储SQL文本的字段, '[A-Za-z0-9_]+\.[A-Za-z0-9_]+', 1, 1)
注意:该正则默认适配Oracle标准对象命名规则,如果业务中的标识符包含其他特殊字符,对应调整正则的字符匹配范围即可
内容的提问来源于stack exchange,提问作者kartheeswaran jayakumar
相关产品推荐
相关产品推荐

