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是避免无限循环所必需的,但您当然可以更改限制
问候
塞缪尔·皮萨罗这回答了你的问题吗?