【发布时间】:2016-02-20 13:28:45
【问题描述】:
我有一个如下所示的示例源字符串,它采用管道分隔格式,因为值 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 像上面的示例一样位于中间时它不能正常工作。
任何帮助将不胜感激。
【问题讨论】:
-
您说 'obr' 可以在列表中的任何位置。如果 'obr' 是列表中倒数第二个或倒数第二个怎么办?
标签: sql regex oracle regexp-replace regexp-substr