首页 >数据库 >mysql教程 >如何在 Oracle 中有效地将逗号分隔值拆分为多行而不重复?

如何在 Oracle 中有效地将逗号分隔值拆分为多行而不重复?

Barbara Streisand
Barbara Streisand原创
2024-12-31 05:48:13382浏览

How to Efficiently Split Comma-Separated Values into Multiple Rows in Oracle Without Duplicates?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn