我在下面有这个请求,它完全符合我的要求,但只有当字段 Author_ID 和 Author_Name 是 VARCHAR 并且它们中的值由星号分隔时才会这样做,如下表所示:
ID_BOOK | ID_AUTHOR | NAME AUTHOR |
-----------------------------------------------
001 |01 | AuthorU |
-----------------------------------------------
002 |02*03*04 | AuthorX*AuthorY*AuthorZ |
-----------------------------------------------
该请求会给我这个结果:
ID_BOOK | ID_AUTHOR | NAME AUTHOR |
-----------------------------------------------
001 |01 | AuthorU |
-----------------------------------------------
002 |02 | AuthorX |
-----------------------------------------------
002 |03 | AuthorY |
-----------------------------------------------
002 |04 | AuthorZ |
-----------------------------------------------
但在现实生活中,这两个字段是 CLOB 并且没有星形分隔符,只有 wordrap 分隔符,所以数据在现实生活中看起来像这样:
ID_BOOK | ID_AUTHOR | NAME AUTHOR |
-----------------------------------------------
001 |01 | AuthorU |
-----------------------------------------------
002 |02*03*04 | AuthorXAuthorYAuthorZ |
我试图获得与 Varchar 字段和星号分隔符相同的结果,因为使用 CLOB 我不能使用 REGEXP_SUBSTR 并且我不知道如何处理 wordrap 分隔符。你能帮我一些提示吗?非常感谢。
SELECT
ID_Book,
REGEXP_SUBSTR(ID_Author, '[^*]+', 1, Counter) AS AuthID,
REGEXP_SUBSTR(Name_Author, '[^*]+', 1, Counter) AS AuthName
FROM Books
CROSS JOIN (
SELECT LEVEL Counter
FROM DUAL
CONNECT BY LEVEL <= (
SELECT MAX(REGEXP_COUNT(ID_Author, '[^*]+'))
FROM Books))
WHERE REGEXP_SUBSTR(Name_Author, '[^*]+', 1, Counter) IS NOT NULL
ORDER BY 1, 2