sql – regex_substr中的connect by子句

我无法理解这个陈述 – 在谷歌搜索后不是eveN
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,LEVEL) IS NOT NULL

解决方法

连接的“滥用”(如Colin’t Hart所说)在这里一个很好的用途:
通过使用REGEXP_SUBSTR,您只能提取4个匹配项中的一个(23,56):正则表达式[^,]匹配字符串中不包含逗号的任何字符序列.

如果您尝试运行:

SELECT REGEXP_SUBSTR ('23,56',]+') as "token" 
FROM   DUAL

你会得到23.

如果你试试跑:

SELECT REGEXP_SUBSTR ('23,1) as "token"
FROM   DUAL

现在我们也设置了two additional parameters:你也会得到23:开始寻找位置1(这是认值),并返回第一次出现.

现在让我们运行:

SELECT REGEXP_SUBSTR ('23,2) as "token"
FROM   DUAL

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

使用递归连接和级别确保您将收到所有相关结果(不一定按照原始顺序!):

SELECT disTINCT REGEXP_SUBSTR ('23,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,LEVEL) IS NOT NULL
order by 1

将返回:

TOKEN
23
34
45
56

它不仅包含所有4个结果,还将其分解为结果集中的单独行!

如果您将使用fiddle – 它可能会让您更清楚地了解该主题.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...