检索后基本确定出现重复数据是因为在递归过程中,regexp_substr函数没有正确移动到下一个匹配项,而是重复移动到了Basketball或者PingPang,至于它底层是什么重复移动的,额我也没搞明白...。 对此我们需要添加prior确保每次递归时都能正确提取。 part3 prior 关于prior的简单介绍 connect by中加prior可以限定父子的对应关系...
3.3、字符串拆分 SELECTREGEXP_SUBSTR('a,b,22','[^,]+',1,LEVEL)FROMDUAL CONNECTBYREGEXP_SUBSTR('a,b,22','[^,]+',1,LEVEL)ISNOTNULL
REGEXP_SUBSTR 结合 CONECT BY LEVEL 代码语言:sql 复制 SELECTregexp_substr(temp.STUDENT,'[^,]+',1,level)STUDENTFROM(SELECT'Student001,Student002,Student003'STUDENTFROMdual)tempCONNECTBYlevel<=REGEXP_COUNT('Student001,Student002,Student003','[^,]+');--Student001--Student002--Student003 代码语...
利用connect by语法可以实现。 语句1: select 'aaa' from dual connect by level<=6 1. 语句2: select regexp_substr('1、2、3、4、5、6', '[^、]+', 1, level) num, regexp_substr('t、ss、3、4、tf、校长', '[^、]+', 1, level) name from dual connect by level <= 6 1. 2. 3...
! connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with 条件...
开发遇到一个报错 ORA-01436: CONNECT BY loop in user data (ORA-01436: 用户数据中的 CONNECT BY 循环)。 1. 报错原因 根据网上的资料,产生这个错误的原因是数据形成了循环。例如下面这个语句: SELECT r1.region_id,parent_id FROM cnl_region r1 ...
select rownum from dual connect by rownum<=10;--生成1-10的序列 效果 3、一行变多行 代码 select REGEXP_SUBSTR('01#02#03#04', '[^#]+', 1, rownum) as newportfrom dual connect by rownum <= REGEXP_COUNT('01#02#03#04', '[^#]+');--一行数据拆分为多行 ...
select REGEXP_SUBSTR('01#02#03#04', '[^#]+', 1, rownum) as newport from dual connect by rownum <= REGEXP_COUNT('01#02#03#04', '[^#]+');--一行数据拆分为多行 效果 总结:总的来说,connect by在处理少量的树状数据还是很强大的,这也是很多人喜欢应用它的原因。但是oracle 是不清楚...
上面的sql中是先求出range_num的最大值与最小值,然后利用connect by 特性生成数值序列结果集,最后让两个结果集关联得到需要的结果。 5.2 再看稍微复杂的结果集,输出结果格式跟上面一样 SQL如下: withtemp0as(selectb.range_num, REGEXP_SUBSTR(b.range_num,[^,]+,1, c.lv)asnewport, REGEXP_SUBSTR(REG...
上面的sql中是先求出range_num的最大值与最小值,然后利用connect by 特性生成数值序列结果集,最后让两个结果集关联得到需要的结果。 5.2 再看稍微复杂的结果集,输出结果格式跟上面一样 SQL如下: withtemp0as(selectb.range_num, REGEXP_SUBSTR(b.range_num,'[^,]+',1, c.lv)asnewport, ...