create or replace function myquchong(oldStr varchar2) return varchar2 is
str varchar2(1000); --存放原始字符串
midstr varchar2(1000); --存放單個關鍵字,兩個斜杠之間的
Result varchar2(1000); --存放結果字符串
startIndex number;
endIndex number;
i number;
begin
--如果傳入的字符串為空,則直接返回空
if oldStr is null then
return ('');
end if;
--初始化參數
str := oldStr || ',';
startIndex := 0;
endIndex := 0;
i :=0;
loop
i :=i+1; --第一次執行時為1
startIndex := endIndex;
--獲取斜杠第i次出現的位置
endIndex := instr(str, ',', 1, i);
if (endIndex = 0) then
exit;
end if;
--截取整個關鍵字,放在一個變量中
midstr :=trim(substr(str, startIndex + 1, endIndex - startIndex - 1));
--第一次賦值前,結果集為空。
if (Result is null) then
Result := midstr;
end if;
--第二次賦值前判斷是否在結果集中已經存在,前后加斜杠確保是整個關鍵字匹配
if instr(',' || Result ||',',','|| midstr ||',')=0 then
Result :=Result || ',' || midstr;
end if;
end loop;
return(Result);
end myquchong;
str varchar2(1000); --存放原始字符串
midstr varchar2(1000); --存放單個關鍵字,兩個斜杠之間的
Result varchar2(1000); --存放結果字符串
startIndex number;
endIndex number;
i number;
begin
--如果傳入的字符串為空,則直接返回空
if oldStr is null then
return ('');
end if;
--初始化參數
str := oldStr || ',';
startIndex := 0;
endIndex := 0;
i :=0;
loop
i :=i+1; --第一次執行時為1
startIndex := endIndex;
--獲取斜杠第i次出現的位置
endIndex := instr(str, ',', 1, i);
if (endIndex = 0) then
exit;
end if;
--截取整個關鍵字,放在一個變量中
midstr :=trim(substr(str, startIndex + 1, endIndex - startIndex - 1));
--第一次賦值前,結果集為空。
if (Result is null) then
Result := midstr;
end if;
--第二次賦值前判斷是否在結果集中已經存在,前后加斜杠確保是整個關鍵字匹配
if instr(',' || Result ||',',','|| midstr ||',')=0 then
Result :=Result || ',' || midstr;
end if;
end loop;
return(Result);
end myquchong;
------------------------------------示例:
select myquchong('a,a,b,b,a,c') from dual;