zoukankan      html  css  js  c++  java
  • oracle 把一行用特殊符号分隔变为多行

    首先创建测试数据

    -- Create table
    create table UF_PQJZB
    (
      id                     INTEGER not null,
      requestid              INTEGER,
      pqmc                   VARCHAR2(100),
      sszq                   INTEGER,
      sfyx                   INTEGER,
      formmodeid             INTEGER,
      modedatacreater        INTEGER,
      modedatacreatertype    INTEGER,
      modedatacreatedate     VARCHAR2(10),
      modedatacreatetime     VARCHAR2(8),
      modedatamodifier       INTEGER,
      modedatamodifydatetime VARCHAR2(100),
      modeuuid               VARCHAR2(100),
      modelableid            VARCHAR2(200),
      pqbm                   VARCHAR2(99),
      qdbls                  INTEGER,
      pqdd                   CLOB
    )
    tablespace ECOLOGY
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate indexes 
    create index UF_IND_1595982945177 on UF_PQJZB (MODEUUID)
      tablespace ECOLOGY
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table UF_PQJZB
      add primary key (ID)
      using index 
      tablespace ECOLOGY
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );

    插入数据

    insert into uf_pqjzb (ID, AA)
    values (57, '5120,4940');

    sql显示

    SELECT * FROM 
    (
    with t AS (
    SELECT id,to_char(pqdd) AS aa from uf_pqjzb WHERE pqdd IS NOT NULL AND ID ='57' 
    )
    select ID,regexp_substr(aa, '[^,]+', 1, level) cc
     
    from t
     
    connect by level <= regexp_count(aa, '\,') + 1
     
    and aa = prior aa
     
    and prior dbms_random.value > 0
    )

    结果显示

     最后我们可以学一个行转列函数

    根据id合并

    SELECT ID , LISTAGG(cc, ',') WITHIN GROUP (ORDER BY ID)
      FROM (SELECT * FROM 
    (
    with t AS (
    SELECT id,to_char(pqdd) AS aa from uf_pqjzb WHERE pqdd IS NOT NULL AND ID ='57' 
    )
    select ID,regexp_substr(aa, '[^,]+', 1, level) cc
     
    from t
     
    connect by level <= regexp_count(aa, '\,') + 1
     
    and aa = prior aa
     
    and prior dbms_random.value > 0
    ))
     GROUP BY ID;

    结果

     好了,当然也可以用WM_CONCAT函数

    但是一定要注意WM_CONCAT转换为是clob字段需要注意

  • 相关阅读:
    LeetCode 第 193 场周赛
    LeetCode 每日一题 15. 三数之和
    LeetCode 每日一题 739. 每日温度
    [转]邹承鲁院士写他是如何读文献
    LeetCode 每日一题 面试题46. 把数字翻译成字符串
    LeetCode 每日一题 990. 等式方程的可满足性
    传说中编程界的龙书、虎书、鲸书、魔法书…… 指的都是哪些?
    LeetCode 每日一题 238. 除自身以外数组的乘积
    C++ 关键字 explicit
    LeetCode 每日一题 837. 新21点
  • 原文地址:https://www.cnblogs.com/chenzhelove/p/13485117.html
Copyright © 2011-2022 走看看