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

标签 sql oracle

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

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/

相关文章:

mysql - SQL结果表,匹配第二个表SET类型

sql - 在 VB.NET 中搜索 DataGridView 的最佳方式?

mysql - 为什么删除重复记录时出现 max(rowid) 或 min(rowid) ?

SQL Where 子句带有 If(或 Case)语句?

sql - 如何将存储过程的输出返回到sql server中的变量中

sql - Postgres : Always use default column value,,即使尝试插入

sql - 如何在 Oracle SQL 上使用双表返回带小数位的预期值?

java - 尝试在 JDBC 数据源上启用 Oracle 透明数据加密

Oracle:跨模式创建 View ?

sql - 如何在 oracle SQL 中使用事务?