Oracle使用REGEXP_SUBSTR返回括号内的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle使用REGEXP_SUBSTR返回括号内的值相关的知识,希望对你有一定的参考价值。
我们在数据库中存储了一些应用程序参数,我正在寻找一种通过SQL提取/解析参数的方法。这些数据的一个例子如下:
PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]
因此,例如,投影的值将是“横向”,引号将是其中的一部分。我认为最简单的方法是使用REGEXP_SUBSTR函数。这是我目前的尝试:
SELECT REGEXP_SUBSTR('PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]', 'PROJECTION[[^][]*]') FROM dual;
虽然返回:
PROJECTION["Transverse"]
我意识到我可以删除不需要的字符,但我很好奇是否有人可以推荐任何REGEX调整,以便SELECT查询返回简单的“横向”这个例子。投影并不总是我想要拉出来的,例如,如果我想要Unit那么我需要返回:“Two”,2
这是使用Oracle数据库10g企业版10.2.0.5.0 - 64bi
答案
SELECT REGEXP_REPLACE(
'PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]',
'^.*PROJECTION[(.+?)].*$', '1'
) FROM dual
另一答案
你可以使用反向引用(1
,2
等)。基本上你想匹配字符串的三个部分:
PROJECTION
参数值之前的所有内容。PROJECTION
参数值。PROJECTION
参数值之后的所有内容。
这三个匹配的正则表达式必须在括号内,以便反向引用。我想出的正则表达式是这样的:
(.*PROJECTION[")(.+)("].*)
^^^^^^ Backref 3: everything after the PROJECTION parameter value
^^^^ Backref 2: the PROJECTION parameter value
^^^^^^^^^^^^^^^^^ Backref 1: everything before the PROJECTION parameter value
然后只需用backref 2替换,忽略1和3:
REGEXP_REPLACE(expr, '(.*PROJECTION[")(.+)("].*)', '2')
另一答案
SELECT REGEXP_SUBSTR('PROJS["AA",ZZZZ[PARAMETER["One",1]],PROJECTION["Transverse"],UNIT["Two",2]]', 'PROJECTION[([^][]*)]', 1, 1, null, 1) FROM dual;
以上是关于Oracle使用REGEXP_SUBSTR返回括号内的值的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL 正则表达式 RegExp_SubStr End Of Line (chr(10) 在搜索文本中返回 null
ORACLE:SQL REGEXP_SUBSTR 返回第一个分号和第二个分号之间的列值。在最后半个 clumn 之后还有其他值
Oracle正则表达式之 Regexp_substr,Regexp_instr,Regexp_replace,Regexp_like