如何在oracle11g中使用字符的第一个和第三个匹配项生成子字符串?

如何在oracle11g中使用字符的第一个和第三个匹配项生成子字符串?,oracle11g,Oracle11g,我在一个专栏中有如下内容- a|bbb|cc|dddd d||ff|gg a|zzzz|pp|rrr 我想显示第一个“|”和第二个“|”符号之间的文本。下面给出的应该是输出 Output ------ bbb null zzzz 尝试使用下面的查询,但它给了我'ff'而不是null SELECT regexp_substr('d||ff|gg','[^|]+',1,2) regexp_substr FROM dual; 我应该怎么做呢?解释了为什么您所做的不太有效,以及如何修改它。您需要一

我在一个专栏中有如下内容-

a|bbb|cc|dddd
d||ff|gg
a|zzzz|pp|rrr
我想显示第一个“|”和第二个“|”符号之间的文本。下面给出的应该是输出

Output
------
bbb
null
zzzz
尝试使用下面的查询,但它给了我'ff'而不是null

SELECT regexp_substr('d||ff|gg','[^|]+',1,2) regexp_substr FROM dual;
我应该怎么做呢?

解释了为什么您所做的不太有效,以及如何修改它。您需要一个稍微复杂一点的模式,包括转义管道分隔符;以及函数调用的其他参数:

SELECT regexp_substr('d||ff|gg','(.*?)(\||$)',1,2,null,1) regexp_substr FROM dual;

REGEXP_SUBSTR
--------------------
(null)
或者使用CTE中的其他示例行:

with t (str) as (
  select 'a|bbb|cc|dddd' from dual
  union all select 'd||ff|gg' from dual
  union all select 'a|zzzz|pp|rrr' from dual
)
select str,
  regexp_substr(str,'(.*?)(\||$)',1,2,null,1) as str2
from t;

STR           STR2
------------- --------------------
a|bbb|cc|dddd bbb
d||ff|gg      (null)
a|zzzz|pp|rrr zzzz