在 Oracle 上将逗号分隔值与其他列拆分为行

问题描述 投票:0回答:1

我有这个数据:

需要转换成这样:

我看到了一些关于 regexp_substr 的示例,但我似乎无法使其在我的程序中运行。

   With folder_query as 
   (
       SELECT * FROM
       (SELECT ID, CardNo, REPLACE(LICENCE (RSN, 1), '<br/>', '') AS TagNo
         FROM FOLDER1) SQ
   )
   SELECT ID, CardNo,regexp_substr(TagNo,'[^,]+',1,level) AS TagNo
   FROM folder_query
   CONNECT by level <= REGEXP_COUNT(TagNo, '[^,]+')

我遇到了一些错误:

ORA-30563: 此处不允许使用外连接运算符 (+) 30563. 00000 - “此处不允许使用外连接运算符 (+)” *原因:尝试在选择列表中引用 (+), CONNECT BY 子句、START WITH 子句或 ORDER BY 子句。 *操作:不要在选择列表、CONNECT BY 子句中使用运算符, START WITH 子句或 ORDER BY 子句。

sql oracle split
1个回答
0
投票

这里有一个选项,用于示例数据:

SQL> select * from test;

        ID     CARDNO TAGNO
---------- ---------- -----------------------
     84773  317012878 AA7 101 443,AA5 101 453    
     84774  317012878 AA2 101 493

查询:

SQL> select id, cardno,
  2    regexp_substr(tagno, '[^,]+', 1, column_value) tagno
  3  from test cross join
  4    table(cast(multiset(select level from dual
  5                        connect by level <= regexp_count(tagno, ',') + 1
  6                       ) as sys.odcinumberlist));

        ID     CARDNO TAGNO
---------- ---------- --------------------
     84773  317012878 AA7 101 443
     84773  317012878 AA5 101 453
     84774  317012878 AA2 101 493

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.