ORACLE 11gr 以上WM_CONCAT失效,無奈使用函數 listagg
select listagg(NAME) WITHIN GROUP (ORDER BY NAME) from ENTITY;
然后發現查詢的結果, 沒有去重,本以為可以簡單的用DISTINCT來解決, 沒想到, listagg 不支持該關鍵字。
查了許久資料,從stackoverflow發現可以用正則來處理去重,於是嘗試使用
select regexp_replace(listagg(NAME) WITHIN GROUP (ORDER BY NAME),'([^,]+)(,\1)*(,|$)', '\1\3') from ENTITY;
測試得到的結果的確是進行了去重處理。
但是,這個去重,必須建立在排序的基礎上,如果listagg拼接出來的數值像
a, b, a, c
這時候,該正則就會失效。
參考鏈接