Actually it's Chris!
if my input is 20 ,32A ,50 ,59 ,71A respective row need to fetch as What exactly is your rule?
Those all appear with a colon after. You could just substr these out:
with d as (
select ('|100|BXX656|:20:200100O0012|:32A:010607USD6025,10|:50:XYZ LABORATORIES PVT LTD|B/2 TESTCHAMBERS 22 B DESAI RD|CBD-26| -||||||||||||||:59:W.S.A. TEXT SZCZESIUL|USA|||:71A:BEN||||||') d from dual
)
select substr(str, instr(str, ':')+1) s
from d, xmltable(
'if (contains($X,"|:")) then ora:tokenize($X,"\|:") else $X'
passing d as X
columns str varchar2(4000) path '.'
);
S
|100|BXX656
200100O0012
010607USD6025,10
XYZ LABORATORIES PVT LTD|B/2 TESTCHAMBERS 22 B DESAI RD|CBD-26| -|||||||||||||
W.S.A. TEXT SZCZESIUL|USA||
BEN||||||