如何在oracle11g中创建第一个和第三个字符的子字符串?

时间:2018-05-15 21:41:29

标签: oracle11g

我在列

中有如下文字
a|bbb|cc|dddd
d||ff|gg
a|zzzz|pp|rrr

我想在1st" |"之间显示文字。和第二个" |"符号。下面给出的应该是输出。

Output
------
bbb
null
zzzz

尝试以下查询,但它给了我&fff'而不是null。

SELECT regexp_substr('d||ff|gg','[^|]+',1,2) regexp_substr FROM dual;

我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

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

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