写一个oracle函数 对传进来的参数根据分隔符进行提取,然后去重
时间: 2023-08-04 12:15:47 浏览: 100
一个oracle根据特定字符截取数据
可以通过自定义Oracle函数来实现对传入参数根据分隔符进行提取并去重的功能。
下面是一个示例函数:
```
CREATE OR REPLACE FUNCTION extract_and_distinct(p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN VARCHAR2
IS
l_result VARCHAR2(4000);
BEGIN
SELECT LISTAGG(DISTINCT TRIM(regexp_substr(p_str, '[^'||p_delimiter||']+', 1, LEVEL)), p_delimiter)
WITHIN GROUP (ORDER BY 1)
INTO l_result
FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT(p_str, '[^'||p_delimiter||']+') ;
RETURN l_result;
END;
```
函数的参数包括p_str(要提取并去重的字符串)和p_delimiter(分隔符),函数的返回值为去重后的字符串。
该函数首先使用Oracle内置的正则表达式函数`regexp_substr`和`regexp_count`对输入的字符串进行分割,并使用`TRIM`函数去除空格,然后使用`LISTAGG`函数将分割后的结果进行去重和合并,最终返回去重后的字符串。
示例调用:
```
SELECT extract_and_distinct('1,2,3,2,4,5,4', ',') FROM dual;
```
输出结果为'1,2,3,4,5'。
阅读全文