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

时间:2017-03-17 20:03:09

标签: oracle regexp-substr

我有这个字符串:

145|567

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

Expected result:
567

非常感谢

4 个答案:

答案 0 :(得分:1)

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

chrome.runtime.onMessage.addListener(function(response, sender, sendResponse) {
  console.log("MY LINK: " + response.link);
});

答案 1 :(得分:1)

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

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

这样您就可以捕获|

之后的任何数字位数

另一个是子字符串

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

这样,您可以从|

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

答案 2 :(得分:0)

如果你想先在一个Query中解决,你需要知道你需要使用哪个位置就像分隔符一样,你可以使用INSTR函数:

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

使用此功能,您可以获得您使用的字符串上的位置,如分隔符。

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

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

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

答案 3 :(得分:0)

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

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