Teradata中用STRTOK_SPLIT_TO_TABLE实现复合键列拆分
在Teradata中使用STRTOK_SPLIT_TO_TABLE处理复合键拆分多行
由于STRTOK_SPLIT_TO_TABLE仅支持单个键参数,我们可以将多个键列拼接成唯一字符串作为传入键,拆分完成后再将该字符串拆分回原键列。具体实现如下:
解决方案步骤
- 选择一个不会出现在键列值中的分隔符(例如
|或不可见字符CHR(1)),将id1和id2拼接为单一键字符串。 - 将拼接后的键、待拆分列和空格分隔符传入
STRTOK_SPLIT_TO_TABLE。 - 在查询结果中,使用
SPLIT_PART函数将组合键拆分回原始的id1和id2列。
完整SQL示例
假设你的源表名为your_table,执行以下代码即可得到期望输出:
SELECT -- 拆分组合键,还原原始id1和id2 CAST(SPLIT_PART(d.outkey, '|', 1) AS INT) AS id1, SPLIT_PART(d.outkey, '|', 2) AS id2, d.token AS new_col FROM your_table t CROSS JOIN TABLE ( STRTOK_SPLIT_TO_TABLE( -- 拼接id1和id2为单一键,使用|作为分隔符 CAST(t.id1 AS VARCHAR(10)) || '|' || t.id2, t.col_to_be_split, ' ' -- 待拆分列的分隔符(空格) ) RETURNS ( outkey VARCHAR(50), -- 需足够容纳拼接后的键字符串 tokennum INTEGER, token VARCHAR(20) CHARACTER SET UNICODE ) ) AS d;
注意事项
- 如果
id1或id2的值中可能包含|,请替换为其他不会冲突的分隔符(例如CHR(1),ASCII控制字符SOH),避免拆分错误。 - 根据实际数据类型和长度,调整
outkey的定义长度以及id1的转换类型。
内容的提问来源于stack exchange,提问作者Brian Lee
相关产品推荐
相关产品推荐

