regex_substr中的connect by子句

  时间:2022-02-05 22:33:11  阅读量:39  评论数:0  作者:HalfWebDev

我无法理解这句话--即使在谷歌搜索之后也无法理解

 
pv_no_list :='23,34,45,56';
SELECT   DISTINCT REGEXP_SUBSTR (pv_no_list,
                                                     '[^,] ',
                                                     1,
                                                     LEVEL)
                                         no_list
                      FROM   DUAL
                CONNECT BY   REGEXP_SUBSTR (pv_no_list,
                                            '[^,] ',
                                            1,
                                            LEVEL) IS NOT NULL</p>

<p>

网友解决方案:

connected by的“滥用”(正如科林·特·哈特所说)在这里有一个很好的目的: 通过使用REGEXP_SUBSTR,您只能提取4个匹配项中的一个(23,34,45,56):regex[^,]匹配字符串中不包含逗号的任何字符序列。

如果尝试运行:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,] ') as "token" 
FROM   DUAL

您将得到23。

如果尝试运行:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,] ',1,1) as "token"
FROM   DUAL

您还将得到23,但现在我们还设置了两个附加参数:开始查找位置1(这是默认值),并返回第一次出现的情况。

现在让我们运行:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,] ',1,2) as "token"
FROM   DUAL

这次我们将得到34(第二次出现),使用3作为最后一个参数将返回45,以此类推。

使用递归连接by和level确保您将收到所有相关的结果(但不一定是按照原来的顺序!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,] ',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,] ',1,LEVEL) IS NOT NULL
order by 1

将返回:

TOKEN
23
34
45
56

,它不仅包含所有4个结果,而且在resultset中将其分成单独的行!

如果你愿意摆弄一下--它可能会让你对这个问题有更清楚的了解。

关键词:sql,oracle,oracle10g


原文地址(source):原文链接

问答周排行榜

    问答月排行榜