问题描述
"(1111,Tem1),(0000,Tem2)"并希望生成一个数据表如
var1 | var2 |
---|---|
1111 | Tem1 |
0000 | Tem2 |
这是我的代码,我创建了滞后 token
并使用奇数行元素进行过滤。
with var_ as (
select '(1111,Tem2)' as pattern_
)
select tbb1.*,tbb2.result_string as result_string_prevIoUs
from(
select tb1.*,min(token) over(partition by 1 order by token asc rows between 1 preceding and 1 preceding) as min_token
from
table (
strtok_split_to_table(1,var_.pattern_,'(),')
returns (outkey INTEGER,token INTEGER,result_string varchar(20))
) as tb1) tbb1
inner join (select min_token,result_string from tbb1) tbb2
on tbb1.token = tbb2.min_token
where (token mod 2) = 0;
但似乎我无法在“from”步骤中生成新变量并直接在“join”步骤中应用它。 所以我想问一下在我的程序中是否仍然可以得到我想要的结果?或者有什么建议吗?
感谢您的帮助。
解决方法
我不会拆分/重组这些组。将每个组拆分为一行,然后拆分行内的值,例如
with var_ as (
select '(1111,Tem1),(0000,Tem2)' as pattern_
),split1 as (
select trim(leading '(' from result_string) as string_
from
table ( /* split at & remove right parenthesis */
regexp_split_to_table(1,var_.pattern_,'\)((,)|$)','c')
returns (outkey INTEGER,token_nbr INTEGER,result_string varchar(256))
) as tb1
)
select *
from table(
csvld(split1.string_,','"')
returns (var1 VARCHAR(16),var2 VARCHAR(16))
) as tb2
;