Oracle数据库 REGEXP_SUBSTR 函数
需求场景:
要求在指定时间段内根据部门名称字段(数据库中为多个,拼接字段) 进行分组计算sum(score)
如图
实现:先切割字段再分组计算,使用到REGEXP_SUBSTR
/**
*- 字段说明
*分割字符串中所有的逗号,然后成多行
*参数说明,
*参数1(DEPT_NAMES): 待分割字符串
*
*参数2('[^,]+'):正则表达式(以‘,’标识号切割)
*
*参数3:起始位置,从第几个字符开始正则表达式匹配(默认为1)
*
*参数4(LEVEL):标识第几个匹配组,默认为1
*
*参数5:模式('i'不区分大小写进行检索;'c'区分大小写进行检索。
默认为'c'。可不写,我这里没有使用第5个参数,可根据业务需求配置)
**/
SELECT DEPT_NAMES ,sum(SCORE) as SCORE FROM
(select REGEXP_SUBSTR(DEPT_NAMES, '[^,]+', 1, LEVEL)DEPT_NAMES,SCORE
FROM PM_INSPECTION_TEMPLATE
WHERE CREATED_TIME BETWEEN 1598505039972 AND 1599113557000
CONNECT BY LEVEL <= REGEXP_COUNT(DEPT_NAMES, ',') + 1
AND rowid= prior rowid
AND prior dbms_random.value is not null) q GROUP BY DEPT_NAMES
代码运行结果: