ORACLE 根据指定字符将字符串去重计数

时间:2019-10-18
本文章向大家介绍ORACLE 根据指定字符将字符串去重计数,主要包括ORACLE 根据指定字符将字符串去重计数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

需求:将两个字符串汇总后根据"$$"分割成数组并去重,统计去重后的数量

方案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都是为了快速的查询层级关系的关键字,在代理关系中,或者权限关系中,经常会有层层嵌套的场景

原文地址:https://www.cnblogs.com/1234cjq/p/11698668.html