sql - 使用正则表达式从管道分隔字符串中获取值 (Oracle)

标签 sql regex oracle regexp-replace regexp-substr

我有一个如下所示的示例源字符串,它采用管道分隔格式,因为值 obr 可以位于任何位置。我需要从第一次出现的 obr 中获取管道的第二个值。因此,对于下面的源字符串,预期是,

源字符串:

select 'asd|dfg|obr|1|value1|end' text from dual
union all
select 'a|brx|123|obr|2|value2|end' from dual
union all
select 'hfv|obr|3|value3|345|pre|end' from dual

预期输出:

value1
value2
value3

我在oracle sql中尝试了以下正则表达式,但它不能正常工作。

with t as (
            select 'asd|dfg|obr|1|value1|end' text from dual
            union all
            select 'a|brx|123|obr|2|value2|end' from dual
            union all
            select 'hfv|obr|3|value3|345|pre|end' from dual
            )
            select text,to_char(regexp_replace(text,'*obr\|([^|]*\|)([^|]*).*$', '\2')) output from t;

当字符串以 OBR 开头时,它可以正常工作,但是当 OBR 位于中间(如上面的示例)时,它就不能正常工作。

如有任何帮助,我们将不胜感激。

最佳答案

不确定 Oracle 如何处理正则表达式,但以星号开头通常意味着您正在查找零个或多个空字符。

您尝试过'^.*obr\|([^|]*\|)([^|]*).*$' 吗?

关于sql - 使用正则表达式从管道分隔字符串中获取值 (Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33786376/

相关文章:

mysql - 获取 MySQL 触发器错误

javascript - 正则表达式:单词必须以给定字符之一结尾

spring - Spring 批处理中的 JdbcPagingItemReader 没有给出正确的结果

sql - 如何查询具有 2 个外键的表?

sql - 查询中的七个内部联接是否过多?

regex - 城市名称的正则表达式

Java用两个空格替换数字包围的一个空格

mysql - 在一个表的查询中同时选择和计数

oracle - 在 PL/SQL 中获取相似的字符串并具有良好的性能

sql - 为什么bcp在列包含空字符串时输出null,在列为null时输出空字符串?