2017-08-11 38 views
0

我有如下的样本串,甲骨文 - 如何提取分隔字符串

A|SDFR|RESTA|PRET|PRUQA 
B|121|BBCTRI|9ALFA|DEV|5AS 

我想提取物,后来发送分隔符的一部分,

预计,

RESTA|PRET|PRUQA 
BBCTRI|9ALFA|DEV|5AS 

我得到的只是提取单个字符regexp_substr

回答

4

假设你的意思是第二个分隔符后,您不需要使用这个正则表达式;您可以使用基本] substr()](http://docs.oracle.com/database/121/SQLRF/functions196.htm)功能,得到了首发位置instr()

substr(<your_string>, instr(<your_string>, '|', 1, 2) + 1) 

的第三个参数instr()说,你想第二次出现;第二个参数说你从位置1.这则指向第二分隔符开始,你想在这个分隔符之后的下一个字符开始,所以必须加1

演示:

with t (str) as (
    select 'A|SDFR|RESTA|PRET|PRUQA' from dual 
    union all select 'B|121|BBCTRI|9ALFA|DEV|5AS' from dual 
) 
select substr(str, instr(str, '|', 1, 2) + 1) 
from t; 

SUBSTR(STR,INSTR(STR,'|',1 
-------------------------- 
RESTA|PRET|PRUQA 
BBCTRI|9ALFA|DEV|5AS 
0

也许是这样;

with a as (select 'B|121|BBCTRI|9ALFA|DEV|5AS' test from dual) 
select substr(test,instr(test,'|',3)+1) from a 
+1

'instr()'调用为您提供从字符串中第三个字符开始的第一个分隔符。如果第一个元素不总是正好是一个字符(例子中的A,B),那么这并不总是按预期工作 –

2

试试这个:

substr(string, instr(string, '|', 1, 2)+1)