常用的字符串聚合(拼接)函數介紹
1.WMSYS.WM_CONCAT
從oracle 10G開始支持,使用案例如下:
select deptno,wmsys.wm_concat(ename)
from emp
group by deptno;
若想將字符之間的分隔符換成其他標點,可添加一個replace函數
select deptno,replace(wmsys.wm_concat(ename),',','、')
from emp
group by deptno;
2.LISTAGG(measure_expr,delimiter) WITHIN GROUP(order_by_clause) OVER(query_partition_clause)
從oracle 11G R2開始支持,可以自己指定分隔符,拼接的字符串可以按照某列排序,使用案例如下:
select deptno,Listagg(ename, '、') Within Group (Order by sal)
from emp
group by deptno;
3.SYS_CONNECT_BY_PATH
從oracle 9i開始支持,有2個參數,第一個參數是形成樹形式的字段,第二個參數是父級和其子級分隔顯示用的分隔符,該函數適用於有父子關系的樹形結構顯示,使用案例如下:
select MAX(deptno),max(substr(sys_connect_by_path(ename,'-'),2))
from emp
where deptno=10
start with ename='KING'
connect by prior empno=mgr
;