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

Get subtring from a string in ORACLE

我有这个字符串:

145|567

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

Expected result:
567

非常感谢

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

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

SUB
---
456

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

select regexp_substr('123|456', '|([\d]+)') from dual

通过这种方式,您可以捕获 |

之后的任意一组数字

另一个是子串

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

这样你就可以从 |

之后的位置开始提取子字符串

如果你想在查询中首先解析你需要知道哪个位置是你需要使用的字符,比如分隔符,你可以使用 INSTR 函数:

SELECT INSTR('145|567', '|') FROM dual;
-- Return 4

使用此函数,您可以获得您使用的字符串中的位置,如分隔符。

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

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

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

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

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