2016-08-09 37 views
0

Ich habe eine Tabelle mit 3 Feldern. Alle sind varchar (256).Teilen Sie ein Feld mit mehreren durch Komma getrennten Werten in mehrere Datensätze in Teradata

Zum Beispiel:

Name :    Id:    Comment: 
Charles  ["92736","387625"]  hello 

Ich möchte eine Ausgabe wie folgt:

Name :    Id:    Comment: 
Charles    92736    hello 
Charles    387625    hello 

Der Code, den ich laufen soll:

SELECT name, STRTOK(id, ',', i) AS x, comment 
FROM test 
CROSS JOIN 
( 
    SELECT day_of_calendar AS i 
    FROM sys_calendar.CALENDAR 
    WHERE i <= 15 
) AS dt 
WHERE x IS NOT NULL; 

Die Ausgabe, die ich erhalte, ist:

Name :    Id:     Comment: 
Charles    ["92736"    hello 
Charles    "387625"]    hello 

Ich will nicht die [und "Zeichen in meiner Ausgabe. Ich möchte nur die numerischen Werte als Zahl.

Jede Hilfe zu diesem Thema wäre willkommen.

+1

Tipp heute: Nie, nie speichern Daten wie Komma getrennte Gegenstände! Es wird dir nur viel Ärger bereiten! – jarlh

+0

Verwenden Sie MySQL oder Teradata? (Die Antwort wird wahrscheinlich produktspezifisch sein.) – jarlh

+0

Hallo, ich benutze Teradata. Und die Werte werden als VARCHAR (256) gespeichert, aber in Form eines Arrays. Zum Beispiel: ["38263", "237463", "64244"] – Austin

Antwort

1

Sie zusätzliche Split-Zeichen hinzufügen:

STRTOK(id, ',["]', i) 

Eine weitere Lösung der Kreuz Mach mit und wechseln Sie zu STRTOK_SPLIT_TO_TABLE statt zu vermeiden ist:

WITH cte AS 
(
    SELECT Name AS inKey, 
      id AS inString, 
      comment 
    FROM test 
) 
SELECT * FROM 
(
    SELECT * 
    FROM TABLE (STRTOK_SPLIT_TO_TABLE(cte.inKey 
            ,cte.inString 
            ,',["]') 
    RETURNS (outKey VARCHAR(40) 
      ,TokenNum INT 
      ,Token VARCHAR(20)) AS dt 
) AS dt 
JOIN cte 
ON cte.inKey = dt.outKey 
+0

Hallo, ist jeder Grund mit STRTOK_SPLIT_TO_TABLE besser als der frühere Ansatz? – Austin

+0

@Austin: Nein, es ist nur eine Variation, Sie könnten testen, welche effizienter ist. – dnoeth