2016-06-10 7 views
0

Ich habe eine Tabelle pTeradata SQL-Split undefined Begrenzer Nummer

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

Ich möchte wie dieses Ergebnis erhalten

id_people age 
     1  22 
     3  10 
     3  20 

Ich habe versucht, diese

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 

Zu allererst es funktioniert, aber ich habe immer noch die Klammern. Wie kann ich Klammern löschen? Zweite Frage: Es funktioniert gut, weil ich weiß, dass ich nur ein Komma in Folge habe, wenn ich die Anzahl der Kommas in Folge für das Spaltenalter nicht kennen würde, wäre ich nicht in der Lage, auf diese Weise zu umgehen. Wie kann ich eine Art von Schleife für eine solche Situation verwenden? Beispiel:

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

Danke

Antwort

1

Neben strtok gibt es auch STRTOK_SPLIT_TO_TABLE :-)

Die Syntax ist ein wenig ungewöhnlich:

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

Können Sie die '() erklären,' Bit, dass Sie die Funktion strtok_split_to_table übergeben? Behandelt es jeden davon als ein mögliches Trennzeichen? – Andrew

+0

@Andrew: Ja, jedes dieser Zeichen wird als Trennzeichen behandelt, dies dient hauptsächlich dazu, Sätze in Wörter zu zerlegen. – dnoeth

+0

Ok vielen Dank. Es funktioniert genau wie erwartet. – John