gpt4 book ai didi

sql - 如何从Oracle中的正则表达式中提取组?

转载 作者:行者123 更新时间:2023-12-03 05:49:10 28 4
gpt4 key购买 nike

我收到此查询并想要提取括号之间的值。

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com