首页 > 数据库 > mysql教程 > 在 Oracle 中拆分逗号分隔值时如何避免重复行?

在 Oracle 中拆分逗号分隔值时如何避免重复行?

Mary-Kate Olsen
发布: 2025-01-01 05:30:09
原创
534 人浏览过

How to Avoid Duplicate Rows When Splitting Comma-Separated Values in Oracle?

将多个逗号分隔值拆分为多个 Oracle 表行且不重复

使用 Oracle CONNECT BY 将逗号分隔数据拆分为多行时和正则表达式,可能会遇到重复的行。以下是生成重复结果的原始查询:

WITH CTE AS (
    SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL
    UNION
    SELECT 'f,g', 2 from dual
    UNION
    SELECT 'h', 3 FROM DUAL
)

SELECT TRIM(REGEXP_SUBSTR(TEMP, '[^,]+', 1, LEVEL)), SLNO
FROM CTE
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(temp, '[^,]+')) + 1
登录后复制

为了解决重复行的问题,对查询进行了以下修改:

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
登录后复制

说明:

  • REGEXP_COUNT 函数用于确定每个字符串中以逗号分隔的值。
  • PRIOR 运算符确保当前行基于 slno 列连接到前一行。
  • DBMS_RANDOM.VALUE 函数生成一个随机值,并用于在分区过程中引入随机性,这有助于防止生成重复行。

以上是在 Oracle 中拆分逗号分隔值时如何避免重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板