以下のようなソース文字列のサンプルがあります。これは、値obrがどこにでもあるという点でパイプ区切り形式でした。obrの最初の出現からパイプの 2 番目の値を取得する必要があります。したがって、以下のソース文字列の場合、予想されるのは次のようになります。
ソース文字列:
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 が途中にある場合は正常に動作しません。
どんな助けでも大歓迎です。