拆分在Teradata 14中分隔为独立行的列

Nav*_*een 0 sql teradata

任何人都可以帮我解决这个问题.在表格中,我现在有这样的数据.

在此输入图像描述

如何将具有分隔符TTBFA-TTBFB-TTBFC-TTBFD的列节点拆分为4行,其他列相同.

加州地区GAXAEB 102,520,000 18.71 4 8/30/2014

加州地区TTBFA 92,160,000 23.33 3 9/13/2014

加州地区TTBFB 92,160,000 23.33 3 9/13/2014

加州地区TTBFC 92,160,000 23.33 3 9/13/2014

加州地区TTBFD 92,160,000 23.33 3 9/13/2014

列NODES的值不总是5个字符,可能如下所示

在此输入图像描述

提前致谢

dno*_*eth 6

INSTR函数通常意味着你正在运行TD14 +.

还有STRTOK功能,更好地使用它而不是SUBSTRING(INSTR).

而不是最多15个UNION ALL,您也可以交叉连接到带有数字的表:

SELECT region_name, STRTOK(nodes, '-', i) AS x
FROM table
CROSS JOIN
 ( -- better don't use sys_calendar.CALENDAR as there are no statistics on day_of_calendar
   SELECT day_of_calendar AS i
   FROM sys_calendar.CALENDAR
   WHERE i <= 15
 ) AS dt
WHERE x IS NOT NULL 
Run Code Online (Sandbox Code Playgroud)

您也可以在TD14中使用STRTOK_SPLIT_TO_TABLE:

SELECT * 
FROM table AS t1
JOIN 
(
   SELECT * 
   FROM TABLE (STRTOK_SPLIT_TO_TABLE(table.division, table.nodes, '-')
      RETURNS (division VARCHAR(30) CHARACTER SET UNICODE
              ,tokennum INTEGER
              ,token VARCHAR(30) CHARACTER SET UNICODE)
              ) AS dt
 ) AS t2
ON t1.division = t2.division
Run Code Online (Sandbox Code Playgroud)

希望这是用于数据清理而不是日常使用......