我有这个数据:
需要转换成这样:
我看到了一些关于 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> 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>