需求:将两个字符串汇总后根据"$$"分割成数组并去重,统计去重后的数量
方案1:使用with as ,distinct , regexp_substr, connect by LEVEL等语句处理
方案2: 使用游标循环数组
上sql语句,由于需要根据两个字符去分割,算$$个数时需除以2,LEVEL需要小于$$字符的个数加1
WITH ACCTS AS ( SELECT DISTINCT str from ( SELECT REGEXP_SUBSTR('1$$2$$3$$1', '[^$$]+', 1, LEVEL, 'i') AS STR FROM DUAL CONNECT BY LEVEL <= ((LENGTH('1$$2$$3$$1') - LENGTH(replace('1$$2$$3$$1', '$$', '')))/2)+1)) SELECT count(1) FROM ACCTS;
查询出来的str为1 2 3 ,统计数量为3
With查询语句不是以select开始的,而是以“WITH”关键字开头
可认为在真正进行查询之前预先构造了一个临时表,之后便可多次使用它做进一步的分析和处理
REGEXP_SUBSTR延伸SUBSTR函数的功能,让你搜索一个正则表达式模式字符串
connect by和level都是为了快速的查询层级关系的关键字,在代理关系中,或者权限关系中,经常会有层层嵌套的场景