我收到此查询并想要提取括号之间的值。
select de_desc, regexp_substr(de_desc, '\[(.+)\]', 1)
from DATABASE
where col_name like '[%]';
但是它给了我带有括号的值,例如“[TEST]”。我只想“测试”。如何修改查询来获取它?
最佳答案
REGEXP_SUBSTR 函数的第三个参数指示目标字符串(示例中的 de_desc
)中要开始搜索的位置。假设在字符串的给定部分中找到匹配项,它不会影响返回的内容。
在 Oracle 11g 中,该函数有第六个参数,我认为您正在尝试使用该参数,它指示您想要返回的捕获组。正确使用的一个例子是:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
其中最后一个参数1
表示您要返回的捕获组的编号。这是link到描述该参数的文档。
10g 似乎没有此选项,但在您的情况下,您可以通过以下方式获得相同的结果:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
因为您知道一场比赛在开头和结尾都会有一个多余的字符。 (或者,您可以使用 RTRIM 和 LTRIM 删除结果两端的括号。)
关于sql - 如何从Oracle中的正则表达式中提取组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7758859/