我得到了这个查询,想要提取括号之间的值.

select de_desc, regexp_substr(de_desc, '\[(.+)\]', 1)
from DATABASE
where col_name like '[%]';

然而,它给了我一个带有括号的值,比如"[TEST]".我只想要"测试".如何修改查询以获取它?

推荐答案

REGEXP_SUBSTR函数的第三个参数指示要开始搜索的目标字符串(示例中为de_desc)中的位置.假设在字符串的给定部分找到了匹配项,它不会影响返回的内容.

在Oracle11g中,函数有第六个参数,我认为这就是您试图使用的参数,它指示您想要返回的捕获组.正确使用的一个例子是:

SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;

其中,最后一个参数1表示要返回的捕获组的编号.下面是对描述参数的文档的详细说明.

在这种情况下,您可以使用10g来实现相同的结果,但在这种情况下:

select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);

因为你知道一个匹配的开头和结尾都有一个多余的字符.(或者,可以使用RTRIM和LTRIM从结果的两端移除括号.)

Sql相关问答推荐

如何连接第二个表并将其内容输入到第一个表的单个字段中?

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

SQL:如何取上一年的平均值?

Redshift PL/pgSQL循环中的参数化列名

我可以在SQLite3中使用BLOB作为主键吗?

比较SQL中以逗号分隔的字符串

如何在连接中使用三个不同的列,从而在PostgreSQL中只获得两个列?

如何将不同层次的产品组和规格组合到最深一层?

如何用HeidiSQL在Firebird中设置超时?

SQL OR子句如何在JOINON查询中工作?

每个分组最多 Select 最后 2 个值并并排显示它们

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

SQL Select 字母范围没有给我任何东西

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

SQL 函数 DIFFERENCE 返回有趣的分数

使用in和and运算符过滤记录的条件

Select 多年的日期范围

SQL Select 最大并获取列名

超过100名员工的连续行

Amazon Redshift - 子计划的哈希表不存在