ORACLE 11gr 以上WM_CONCAT失效,无奈使用函数 listagg
select listagg(NAME) WITHIN GROUP (ORDER BY NAME) from ENTITY;
然后发现查询的结果, 没有去重,本以为可以简单的用DISTINCT来解决, 没想到, listagg 不支持该关键字。
查了许久资料,从*发现可以用正则来处理去重,于是尝试使用
select regexp_replace(listagg(NAME) WITHIN GROUP (ORDER BY NAME),'([^,]+)(,\1)*(,|$)', '\1\3') from ENTITY;
测试得到的结果的确是进行了去重处理。
但是,这个去重,必须建立在排序的基础上,如果listagg拼接出来的数值像
a, b, a, c
这时候,该正则就会失效。
参考链接
https://*.com/questions/11510870/listagg-in-oracle-to-return-distinct-values/11511203#11511203