2016-08-09 29 views
0

3つのフィールドを持つテーブルがあります。すべてvarchar(256)です。例えばカンマで区切られた複数の値を持つフィールドを、teradataの複数のレコードに分割します。

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

私はこのような出力をしたい:

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

私は実行するコードは次のとおりです。

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; 

私が手出力は次のようになります。

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

私の出力に[と "文字が必要ない。私は数値を数値として欲しいだけです。

これについての助けに感謝します。

+1

ヒント:、今までのようにデータを保存することはありませんカンマ区切りのアイテム!それはあなたに多くのトラブルを引き起こすだけです! – jarlh

+0

MySQLまたはTeradataを使用していますか? (答えはおそらく製品固有のものです。) – jarlh

+0

こんにちは、私はteradataを使用しています。値はVARCHAR(256)として保管されますが、配列の形で保管されます。例:["38263"、 "237463"、 "64244"] – Austin

答えて

1

あなたは追加の分割文字を追加することができます。

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

別の解決策は、クロス参加し、代わりにSTRTOK_SPLIT_TO_TABLEに切り替えないようにすることです:今日の

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

こんにちは、STRTOK_SPLIT_TO_TABLEの理由は以前のアプローチよりも優れていますか? – Austin

+0

@Austin:いいえ、それは単なるバリエーションです。より効率的なものをテストするかもしれません。 – dnoeth

関連する問題