with test as(
SELECT '(TP)F3939C|B089P25011DCO|230407|2761|PO:1000.0|1019.2|1049.7|11.88|WD:452.5|453.5|455.0|0.63|VF:3.02|3.06|3.10|0.02|' [A]
)
SELECT T2.LX,substring(T2.SJ,b.number,charindex('|',T2.SJ+'|',b.number)-b.number) as [SJ2] FROM (
SELECT SUBSTRING(T1.B,1,2) [LX],SUBSTRING(T1.B,4,LEN(T1.B)-4) [SJ] FROM (
SELECT SUBSTRING(A,PATINDEX('%PO:%',A),PATINDEX('%WD:%',A)- PATINDEX('%PO:%',A)) [B] FROM TEST
UNION ALL
SELECT SUBSTRING(A,PATINDEX('%WD:%',A),PATINDEX('%VF:%',A)- PATINDEX('%WD:%',A)) FROM TEST
UNION ALL
SELECT SUBSTRING(A,PATINDEX('%VF:%',A),LEN(A)- PATINDEX('%VF:%',A))+'|' FROM TEST
) T1
) T2,master..spt_values b with(nolock)
where b.number>=1 and b.number<len(T2.SJ) and b.type='P'
and substring('|'+T2.SJ,number,1)='|'
