项目很多业务表中存储的信息都是以逗号分隔的业务数据,在统计、转码的时候很是不便,使用 with X('','') as values('','') 对结果方便递归操作。db2一个字段由多个数据以逗号分隔,分隔的数据为字典表的code,现在要通过sql将该字段直接转换为字典code对应的name,参考下图:
图1转成图二
图一
图二
WITH n
(
str,
ori,
pos,
USER
)
AS
(
VALUES
(
concat('1,2',','),
1,
posstr(concat('1,2' ,','), ','),
'402882775f0e5084015f10cdaa00006a'
)
UNION ALL SELECT str,
pos+1,
locate(',', str, pos+1),
USER
FROM n
WHERE locate(',', str, pos+1)>0
)
SELECT LISTAGG(s.CODE_NAME,',') WITHIN GROUP(
ORDER BY n.USER)
FROM n,
SYS_CODE_LIST s
WHERE s.CODE_ID = substr(str,ori,
CASE pos-ori
WHEN -1
THEN 32
ELSE pos - ori
END)