2016-06-10 97 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