Oracle 去掉重复字符串

create or replace function remove_same_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_same_string;
时间: 2024-11-03 21:36:10

Oracle 去掉重复字符串的相关文章

oracle去掉重复记录语句

比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.* from persons  p1,persons  p2 where p1.id<>p2.id and  p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address 可以实现上述效果. www.2cto.com 几个删除重复记录的SQL语句 1.用rowid方法 2.用group

ORACLE PL/SQL 字符串函数、数学函数、日期函数

ORACLE PL/SQL 字符串函数.数学函数.日期函数 --[字符串函数] --字符串截取substr(字段名,起始点,个数) select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1; --字符串从前面取三个(0开始) select Name,substr(Name,0,3) from t1; --字符串从后面取三个 select Name,substr(Name,-3

js-数组中去掉重复的

关于一个固定的已知的数组例如:var arr = ['name','OK','123','n','look','777','n','123','name',1,3,5,1,'OK']; 那么问题来了,我们怎么能去掉重复的字符串或者数字,得到新的数组呢! 方法①: function takeRepetition_1(arr){ var data= {};  //这里会遍历data的arr[i]属性 因为data为空 理所当然返回undefined var result = []; for(var

$.unique() 对象组成的数组去掉重复对象

发现一件事,一个完全由对象组成的数组,用$.unique()方法去掉重复的时候不管用 1 var arr = [{text:'第一个',value:'1'},{text:'第二个',value:'2'},{text:'第三个',value:'3'},{text:'第一个',value:'1'},{text:'第二个',value:'2'},{text:'第三个',value:'3'}] 假设用 arr = $.unique(arr),这种方法处理一下,去掉重复的对象,结果返回的还是arr 原来的

数组去掉重复值

1.一维数组 array_unique(); 2.二维数组 //todo 二维数组去掉重复值class array_table { function array_unique_fb($array2D) { foreach ($array2D as $v) { $v = join(",", $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $temp = array_unique($temp); //去掉重复的字符串,也就是重

WPF中使用Hashtable剔除重复字符串(比如电话号码)

原文:WPF中使用Hashtable剔除重复字符串(比如电话号码) 本文中的输入框中的字符串是逗号隔开的,你可以换成其他特别的字符串. 本篇中的亮点:1. 里面有一个玻璃样式按钮,用XAML制作2. WPF下TextBox允许多行文本的设置3. 使用Hashtable剔除重复字符串(比如电话号码) 运行时的样子:(为了保护隐私,做了虚化及其他处理) WPF下TextBox允许多行文本的设置:需要:(1)将TextWrapping设为"Wrap"(2)将AcceptsReturn设为&q

去除ArrayList集合中重复字符串元素方式_思路:创建新集合方式

import java.util.ArrayList; import java.util.Iterator; public class jh_01_去除ArrayList集合中重复字符串元素方式 { /* * /** * * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 */ public static void main(String[] args) { ArrayList list = new ArrayList(); li

Shell下支持变量的重复字符串

Python解决重复字符串是一个很轻松的事,比如说a="james",那么要获得"jamesjamesjames"就是"a*3". 但是这种"*"的字符串乘法在shell里是没有的,比如说"要输出10个a",还不想用for循环来做,怎么办? 首先都知道如果只是想输出1~10这十个数,是很简单的: #echo {1..10}就会得到:1 2 3 4 5 6 7 8 9 10 而使用#seq 1 10也可以,只

初探oracle删除重复记录,只保留rowid最小的记录

如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种). 1.首先创建一个测试表. create table my_users( id number, username varchar2(20), sal number ) 2.插入测试数据 begin for i in 1..10 loop insert into my_users values(i,'carl