Teradata SQL 将单个字符串拆分为表行

问题描述

我有一个字符串元素,例如:

"(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
;