从ORACLE中的字符串获取子字符串

从ORACLE中的字符串获取子字符串,oracle,regexp-substr,Oracle,Regexp Substr,我有这个字符串: 145|567 我只想提取“|”后面的部分 这个想法是不使用位置,因为字符串可能有不同的长度 Expected result: 567 非常感谢使用instr()获取|和substr()的位置。例如: select substr( '123|456', instr( '123|456','|' )+1 ) from dual; SUB --- 456 使用instr()获取|和substr()的位置。例如: select substr( '123|456', instr

我有这个字符串:

145|567
我只想提取“|”后面的部分 这个想法是不使用位置,因为字符串可能有不同的长度

Expected result:
567
非常感谢

使用instr()获取|和substr()的位置。例如:

select substr( '123|456', instr( '123|456','|' )+1 ) from dual;

SUB
---
456
使用instr()获取|和substr()的位置。例如:

select substr( '123|456', instr( '123|456','|' )+1 ) from dual;

SUB
---
456

我想到了两种方法。第一个是正则表达式

select regexp_substr('123|456', '|([\d]+)\1') from dual
通过这种方式,您可以捕获
|

另一个是带子串的

select substr('123|456', instr('123|456', '|') + 1) from dual

这样,您就可以从
|

后面的位置开始将子字符串放在外,我想到了两种方法。第一个是正则表达式

select regexp_substr('123|456', '|([\d]+)\1') from dual
通过这种方式,您可以捕获
|

另一个是带子串的

select substr('123|456', instr('123|456', '|') + 1) from dual

通过这种方式,可以从
|

后面的位置开始将子字符串外接。如果要首先在查询中解析,则需要知道需要在哪个位置使用字符,如分隔符,可以使用INSTR函数:

SELECT INSTR('145|567', '|') FROM dual;
-- Return 4
使用此函数可以获得字符串上使用的位置,如分隔符

然后,可以将此函数嵌套在SUBSTR中,SUBSTR用于提取字符串的一部分:

SELECT SUBSTR('145|567', INSTR('145|567', '|') + 1) FROM dual;
-- Return 567

您需要添加一个位置,因为INSTR返回分隔符的确切位置,如果不想返回SUBSTR操作,则传递到字符串的下一个位置。

如果您想首先在查询中解析,则需要知道需要在哪个位置使用类似分隔符的字符,您可以使用INSTR功能:

SELECT INSTR('145|567', '|') FROM dual;
-- Return 4
使用此函数可以获得字符串上使用的位置,如分隔符

然后,可以将此函数嵌套在SUBSTR中,SUBSTR用于提取字符串的一部分:

SELECT SUBSTR('145|567', INSTR('145|567', '|') + 1) FROM dual;
-- Return 567

您需要添加一个位置,因为INSTR返回分隔符的确切位置,如果不想返回SUBSTR操作,则传递到字符串的下一个位置。

按位置解析没有问题,只要您的解决方案处理不同长度的元素。此regexp_substr获取列表中的第二个元素,其中元素后跟管道或行的末尾。它不关心元素的长度,并且处理多个元素甚至空元素

select regexp_substr('123|456', '(.*?)(\||$)', 1, 2, NULL, 1) from dual

只要您的解决方案处理不同长度的元素,按位置进行解析就没有问题。此regexp_substr获取列表中的第二个元素,其中元素后跟管道或行的末尾。它不关心元素的长度,并且处理多个元素甚至空元素

select regexp_substr('123|456', '(.*?)(\||$)', 1, 2, NULL, 1) from dual

这被标记为Oracle和regexp-不确定regexp是答案-您是否要求PL/SQL?这被标记为Oracle和regexp-不确定regexp是答案-您是否要求PL/SQL?非常感谢。regexp_substr不起作用,但是第二个解决方案是可以的。非常感谢。regexp_substr不起作用,但第二个解决方案是可以的。