SQL 中 SPLIT 的条件偏移

Condition OFFSET on SPLIT in SQL

我正在 Google 大查询上使用 SQL。

我有一列 MyColumn,其值采用以下格式:

Text0;Text1;Text2;Text3;Text4;T12=12/T26=5/T13=1/T55=ABC

我需要获取 T13 的值(本例中为“1”)。

到目前为止我完成的代码是这样的:

 SELECT MyColumn,
    SPLIT(MyColumn, ';')[SAFE_OFFSET(1)] Text1,
    SPLIT(MyColumn, ';')[SAFE_OFFSET(2)] Text2,
    SPLIT(MyColumn, ';')[SAFE_OFFSET(1)] Text3,
    SPLIT(MyColumn, ';')[SAFE_OFFSET(1)] Text4,
    REPLACE(SPLIT(SPLIT(MyColumn, ';')[SAFE_OFFSET(5)],"/")[SAFE_OFFSET(2)],"T13=","") T13
 FROM MyTable 

如果 T13 位于列表中的第 3 位,则此代码有效。 但我有它不存在的价值观。例如:

Text0;Text1;Text2;Text3;Text4;T13=1/T55=ABC

Text0;Text1;Text2;Text3;Text4;T12=12/T26=5/T55=ABC/T13=1

一旦我通过“/”完成了 SPLIT,我如何动态检测 T13 的位置并获取它的值?动态偏移是否可能?

谢谢

使用regexp_extract():

select regexp_extract(mycolumn, 'T13=([^/;]+)')
from (select 'Text0;Text1;Text2;Text3;Text4;T12=12/T26=5/T13=1/T55=ABC' as mycolumn union all 
      select 'Text0;Text1;Text2;Text3;Text4;T13=1/T55=ABC' union all
      select 'Text0;Text1;Text2;Text3;Text4;T12=12/T26=5/T55=ABC/T13=1'
    ) t