我在列
中有如下文字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;
我该怎么做呢?
答案 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