问题描述
需要解决的问题是这样的:
某张表其中一列是如上图所示的数据,表示这一行数据属于某个分类,其可能属于多个分类。现在的需求是计算整张表中每个分类所对应的总数。
解决方案
要实现上述的功能首先需要能够把这一列进行字符串拆分,然后进行计数、汇总。
字符串拆分
经过查找资料,发现Oracle自带的 regexp_substr()
可以实现我想要的效果,在本例中就能够匹配 |
字符,返回一个拆分后的匹配组。
首先看一下 regexp_substr() 的用法:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)
首先我们试一下最基础的用法
SELECT
CLASSIFICATION,
-- 使用‘|’拆分字符串,并取拆分结果的第1个
REGEXP_SUBSTR(CLASSIFICATION, '[^|]+', 1, 1, 'i') result
FROM
test
WHERE ROWNUM < 10
结果如下:
但是这样使用只能读取到每一行数据中的某一个拆分后的结果,我们需要拆分后的所有结果,所以需要进一步完善上述语句