SELECT LISTAGG(x, ';') WITHIN GROUP(ORDER BY x)
FROM (
SELECT DISTINCT regexp_substr('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) AS x
FROM dual
CONNECT BY regexp_substr('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) IS NOT NULL
);
这回来了 aa;bb;cc;dd;ee
0
如果是oracle 11g及更高版本,您可以使用它
SELECT listagg(val,';') WITHin GROUP(ORDER BY NULL)
FROM
(SELECT DISTINCT REGEXP_SUBSTR('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) val
FROM dual
CONNECT BY REGEXP_SUBSTR('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, LEVEL) IS NOT NULL)
1
和xmlquery .
select xmlcast( xmlquery('let $i := string-join(distinct-values(ora:tokenize($doc,";")),";") return $i' passing 'aa;bb;aa;cc;dd;ee;dd' as "doc" returning content) as varchar2(4000)) from dual
SELECT wm_concat(DISTINCT regexp_substr('aa;bb;aa;cc;dd;ee;dd','[^;]+', 1, level))
FROM dual
CONNECT BY regexp_substr('aa;bb;aa;cc;dd;ee;dd', '[^;]+', 1, level) IS NOT NULL;
4 回答
您可以先split your string,使用
DISTINCT
过滤重复项并使用LISTAGG(例如SQL Fiddle)再次组合它 .这回来了
aa;bb;cc;dd;ee
如果是oracle 11g及更高版本,您可以使用它
和xmlquery .