DB2逗号将值分隔为列

DB2逗号将值分隔为列,db2,db2-400,db2-luw,Db2,Db2 400,Db2 Luw,在我的表格中,有如下值 每个逗号需要单独的列 Select Element from Test_check Element: Test,Sample,Maiden Expected Result : Element: Test Sample Maiden 2个选项,取决于您正在尝试的操作 SP仅在10.1和更高版本的LUW上可用 递归查询 这可能是一种选择 CREATE TABLE TLIST (ID INTEGER, LISTVALUES VARCHAR(100)) INSERT I

在我的表格中,有如下值

每个逗号需要单独的列

Select Element from Test_check

Element:
Test,Sample,Maiden

Expected Result :

Element:
Test
Sample
Maiden

2个选项,取决于您正在尝试的操作

SP仅在10.1和更高版本的LUW上可用

递归查询

这可能是一种选择

CREATE TABLE TLIST (ID  INTEGER, LISTVALUES VARCHAR(100))
INSERT INTO TLIST VALUES(1, '10,11,12,13,14,15')
INSERT INTO TLIST VALUES(2, '25,26,27,28,29')

select * from tlist

ID          LISTVALUES
----------- ------------------
          1 10,11,12,13,14,15
          2 25,26,27,28,29   

WITH pquery (ID, wordnum, word, remainder)
AS
(
  SELECT base.ID, 1, 
    CASE WHEN LOCATE (',', LISTVALUES) > 0 THEN 
      SUBSTR (LISTVALUES, 1, LOCATE (',', LISTVALUES) - 1)
    ELSE
      LISTVALUES
    END word,
    CASE WHEN locate (',', LISTVALUES) > 0 THEN
      LTRIM (SUBSTR (LISTVALUES, LOCATE (',', LISTVALUES) + 1))
    ELSE
      NULL
    END remainder
  FROM TLIST base 
  
  UNION ALL
  
  SELECT ID, wordnum + 1, 
    CASE WHEN LOCATE (',', remainder) > 0 then 
      SUBSTR (remainder, 1, LOCATE (',', remainder) - 1)
    ELSE
      remainder
    END word,
    CASE WHEN LOCATE (',', remainder) > 0 THEN
      LTRIM (SUBSTR (remainder, LOCATE (',', remainder) + 1))
    ELSE
      NULL
    END remainder
  FROM pquery t0
  WHERE (t0.remainder IS NOT NULL )
    AND (wordnum < 100)
)
SELECT ID, WORD FROM pquery pq order by ID , wordnum;


ID          WORD      
----------- ----------
          1 10        
          1 11        
          1 12        
          1 13        
          1 14        
          1 15        
          2 25        
          2 26        
          2 27        
          2 28        
          2 29        
另外,WHERE子句中的谓词wordnum<100是避免无限循环所必需的,但您当然可以更改限制

问候
塞缪尔·皮萨罗

这回答了你的问题吗?