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字段需要注意

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM