2016-06-10 99 views
0

我有一个表中的pTeradata的SQL拆分不确定的分隔符数

id_people age 
    1  22 
    2     ---> (empty) 
    3  (10,20) 

我想造成这样

id_people age 
     1  22 
     3  10 
     3  20 

我已经试过这

select t.id_people, 
    STRTOK(t.age,',',1) AS COL_1,STRTOK(t.age,',',2) AS COL_2 from 
(select id_people,age from p where LENGTH(age) >0) t 

首先,它的工作原理,但我仍然有括号。我如何删除括号?第二个问题:它工作正常,因为我知道我连续只有一个逗号,如果我不知道连续逗号的数量,我不能通过这种方式处理。 如何使用一种循环来处理这种情况? 例子:

id_people age 
    1  (17,18,19,20,21,22,23,24,25,....) 
    2  (30,31,32) 
    3   --> (empty) 

谢谢

回答

1

除了strtok的存在也STRTOK_SPLIT_TO_TABLE :-)

的语法是有点不寻常:

WITH cte (id_people, age) AS 
(
    SELECT id_people, age FROM dropme 
) 
SELECT * 
FROM TABLE 
(STRTOK_SPLIT_TO_TABLE(cte.id_people , cte.age, '(),') 
    RETURNS (id_people INT , TokenNum INT , Token VARCHAR (10) CHARACTER SET UNICODE) 
) dt 
+0

你能解释一下'(),'有点你通过strtok_split_to_table函数?它是否将这些视为潜在的分隔符? – Andrew

+0

@Andrew:是的,每个角色都被视为分隔符,这主要是为了将句子标记为单词。 – dnoeth

+0

非常感谢你。它完全按预期工作。 – John