我得到了这个查询,想要提取括号之间的值.
select de_desc, regexp_substr(de_desc, '\[(.+)\]', 1)
from DATABASE
where col_name like '[%]';
Run Code Online (Sandbox Code Playgroud)
然而它给了我带括号的值,例如"[TEST]".我只想要"TEST".如何修改查询以获取它?
Dav*_*sta 90
REGEXP_SUBSTR函数的第三个参数指示de_desc要开始搜索的目标字符串(在您的示例中)中的位置.假设在字符串的给定部分中找到匹配,则不会影响返回的内容.
在Oracle 11g中,该函数有第六个参数,我认为是您尝试使用的参数,它表示您想要返回的捕获组.正确使用的一个例子是:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Run Code Online (Sandbox Code Playgroud)
最后一个参数1指示要返回的捕获组的编号.以下是描述参数的文档的链接.
10g似乎没有此选项,但在您的情况下,您可以通过以下方式获得相同的结果:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
Run Code Online (Sandbox Code Playgroud)
因为你知道一个匹配在开头和结尾只有一个多余的字符.(或者,您可以使用RTRIM和LTRIM从结果的两端删除括号.)
iva*_*tpr 24
您需要进行替换并使用与整个字符串匹配的正则表达式模式.
select regexp_replace(de_desc, '.*\[(.+)\].*', '\1') from DATABASE;
Run Code Online (Sandbox Code Playgroud)