[My Function]Oracle删除同一字段内 分隔符 分割 的相同内容

 

主要功能:删除同一字段内 分隔符 分割 的相同内容

基本用法:function_del_str(字段,分割符)

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as yzreal
 
SQL> select function_del_str('200902880、200902880、200902880、200902882、200902883','、') from dual;
 
FUNCTION_DEL_STR('200902880、2
--------------------------------------------------------------------------------
200902883、200902882、200902880
 
SQL:

 

View Code
 1   CREATE OR REPLACE FUNCTION function_del_str(input_str in VARCHAR2,input_char in VARCHAR2)
 2   RETURN VARCHAR2 IS
 3   -----删除某字段内的重复内容(以input_char分隔)
 4   output_str VARCHAR2(4000);
 5   li_count   NUMBER;
 6   temp_str   VARCHAR2(4000);
 7   temp_str1   VARCHAR2(4000);
 8   li_count2  VARCHAR2(4000);
 9   li_regstr  VARCHAR2(4000);
10   temp_char VARCHAR2(4000);
11   BEGIN
12   temp_str:='';
13   temp_str1:='';
14   select replace(input_char,'''','') into temp_char from dual;
15   li_regstr := '[^'||temp_char||']+';
16  select  (length(input_str||input_char)-length(replace(input_str||input_char,input_char,'')))/length(input_char) into li_count  from dual;
17 
18   IF li_count = 1 THEN
19     temp_str := input_str;
20   END IF;
21   IF li_count >1 THEN
22     FOR cur IN (SELECT  distinct( REGEXP_SUBSTR(input_str , li_regstr , 1, LEVEL, 'i')) STR  FROM DUAL   CONNECT BY LEVEL <=  LENGTH(input_str ) - LENGTH(REGEXP_REPLACE(input_str , input_char, ''))+1) loop
23     temp_str1:= cur.str||input_char||temp_str1;
24      end loop;
25      select  RTRIM(temp_str1,input_char) into temp_str from dual;
26   END IF;
27   output_str:=temp_str;
28   RETURN output_str;
29 END;
posted @ 2013-01-24 16:24  Getlayer  阅读(222)  评论(0)    收藏  举报