Oracle:有效地将逗号分隔的值拆分为多行
在 Oracle 查询中,使用 CONNECT 将逗号分隔的数据拆分为多行时BY 和正则表达式可能会出现重复行。要解决此问题,请考虑以下策略:
使用 REGEXP_COUNT() 进行精确拆分
修改后的查询引入 REGEXP_COUNT() 来确定逗号分隔的数量每行中的值:
WITH CTE AS ( SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL UNION SELECT 'f,g' temp, 2 slno FROM DUAL UNION SELECT 'h' temp, 3 slno FROM DUAL ) SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno FROM CTE CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+') AND PRIOR slno = slno AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
利用连接by Level 和 Prior DBMS_RANDOM.VALUE
此增强型查询利用 CONNECT BY LEVEL 和 PRIOR DBMS_RANDOM.VALUE 来消除重复项:
WITH CTE AS ( SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL UNION SELECT 'f,g' temp, 2 slno FROM DUAL UNION SELECT 'h' temp, 3 slno FROM DUAL ) SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno FROM CTE CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+') AND PRIOR slno = slno
通过使用此修改后的查询,您可以有效地将逗号分隔值拆分为多行,同时确保消除重复行。
以上是如何在 Oracle 中有效地将逗号分隔值拆分为多行而不重复?的详细内容。更多信息请关注PHP中文网其他相关文章!