oracle如何去除字符串中的重复字符

 我来答
千锋教育
2016-01-13 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部

代码如下:

create or replace function remove_rame_string(oldStr varchar2, sign varchar2)  
  return varchar2 is  
  
  /****************************************************  
  ** Oracle去掉重复字符串  
  ** 函数名称:RemoveSameStr  
  ** 参    数:【名称】         【类型 】      【说明】  
  **           oldStr           varchar2       要处理的字符串  
  **           sign             varchar2       字符串分隔符  
  ** 返 回 值:Result           varchar2       不包含重复子串的记录  
  ****************************************************/  
  str          varchar2(2000);  
  currentIndex number;  
  startIndex   number;  
  endIndex     number;  
  
  type str_type is table of varchar2(30) index by binary_integer;  
  arr str_type;  
  Result varchar2(1000);  
begin  
  -- 空字符串  
  if oldStr is null then  
    return('');  
  end if;  
  
  --字符串太长  
  if length(oldStr) > 2000 then  
    return(oldStr);  
  end if;  
  str := oldStr;  
  
  currentIndex := 0;  
  startIndex   := 0;  
  
  loop  
    currentIndex := currentIndex + 1;  
    endIndex     := instr(str, sign, 1, currentIndex);  
    if (endIndex <= 0) then  
      exit;  
    end if;  
  
    arr(currentIndex) := trim(substr(str,  
                                     startIndex + 1,  
                                     endIndex - startIndex - 1));  
    startIndex := endIndex;  
  end loop;  
  
  --取最后一个字符串:  
  arr(currentIndex) := substr(str, startIndex + 1, length(str));  
  
  --去掉重复出现的字符串:  
  for i in 1 .. currentIndex - 1 loop  
    for j in i + 1 .. currentIndex loop  
      if arr(i) = arr(j) then  
        arr(j) := '';  
      end if;  
    end loop;  
  end loop;  
  
  str := '';  
  for i in 1 .. currentIndex loop  
    if arr(i) is not null then  
      str := str || sign || arr(i);  
      --数组置空:  
      arr(i) := '';  
    end if;  
  end loop;  
  
  --去掉前面的标识符:  
  Result := substr(str, 2, length(str));  
  
  return(Result);  
end remove_rame_string;
TableDI
2024-07-18 广告
VLOOKUP函数在Excel中主要用于垂直查找数据,但无法直接一次性匹配多行数据。若要实现这一功能,可以采取以下方法:1. 使用辅助列和数组公式,通过IF函数结合TE电商平台TJOIN函数将多个匹配值合并到一个单元格中。2. 利用VLOO... 点击进入详情页
本回答由TableDI提供
一骑当后
推荐于2018-03-14 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40299 获赞数:306428
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
  这个函数的功能主要是用于去除给定字符串中重复的字符串.在使用中需要指定字符串的分隔符.示例:
  str := RemoveSameStr('zhang,Zhang,bao,Bao,bao,zhang', ',');
  输出: zhang,Zhang,bao,Bao
  -->SQL
  str varchar2(1000);
currentIndex number;
startIndex number;
endIndex number;
  type str_type is table of varchar2(30) index by binary_integer;
arr str_type;
  Result varchar2(1000);
begin
-- 空字符串
if oldStr is null then
return('');
end if;
  --字符串太长
if length(oldStr) > 1000 then
return(oldStr);
end if;
str := oldStr;
  currentIndex := 0;
startIndex := 0;
  loop
currentIndex := currentIndex + 1;
endIndex := instr(str, sign, 1, currentIndex);
if (endIndex <= 0) then
exit;
end if;

arr(currentIndex) := trim(substr(str,
startIndex + 1,
endIndex - startIndex - 1));
startIndex := endIndex;
end loop;
  --取最后一个字符串:
arr(currentIndex) := substr(str, startIndex + 1, length(str));
  --去掉重复出现的字符串:
for i in 1 .. currentIndex - 1 loop
for j in i + 1 .. currentIndex loop
if arr(i) = arr(j) then
arr(j) := '';
end if;
end loop;
end loop;
  str := '';
for i in 1 .. currentIndex loop
if arr(i) is not null then
str := str || sign || arr(i);
--数组置空:
arr(i) := '';
end if;
end loop;
  --去掉前面的标识符:
Result := substr(str, 2, length(str));
  return(Result);
end RemoveSameStr;
转载,仅供参考。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式