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
我正在 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