`

sqlserver和oracle中去除某一字段中重复字节,以逗号分隔

    博客分类:
  • SQL
阅读更多

sqlserver:

create function reny_str(@str varchar(2000)) returns varchar(20)
as
begin
    declare @t table(a varchar(200))
    declare @b table(a varchar(200))
       insert @t
      select substring(@str,number,charindex(',',@str + ',',number) - number)
       from master..stp_values
      where type='p'
          and substring(',' + @str,number,1)=','
    insert into @b select distinct a from @t
    declare @a varchar(4000)
      select  @a=isnull(@a+',','')+a from @b
    return @a
end

 

select dbo.reny_str('游泳,游泳');

 

oracle:

CREATE OR REPLACE FUNCTION F_REPEAT(Report_No in varchar2) return varchar2 is
  StrReportNo  varchar2(2000);
  StrTemp      varchar2(2000);
  TempReportNo varchar2(2000);
begin
  StrReportNo  := '';
  StrTemp      := '';
  TempReportNo := Report_No;
  loop
    --判断参数有没有值
    if instr(TempReportNo || ',', ',', 1, 1) > 1 THEN
      --以','分隔截取字段
      StrTemp := SUBSTR(TempReportNo,
                        1,
                        INSTR(TempReportNo ||',',',',1,1)-1);
    end if;
    --判断是否已经存在相同值,这里前后一定要加分隔符
    if INSTR(',' || StrReportNo || ',', ',' || StrTemp || ',', 1, 1) = 0 THEN
      --累加不同结果
      StrReportNo := StrReportNo || ',' || StrTemp;
    end IF;
    --将判断过的字段删除掉
    TempReportNo := SUBSTR(TempReportNo,
                           INSTR(TempReportNo || ',', ',', 1, 1) + 1);
    --参数所有值完成过滤判断后跳出循环
    exit WHEN length(TempReportNo) = 0 or TempReportNo is null;
  end LOOP;
  return SUBSTR(StrReportNo, 2);
  end F_REPEAT;

分享到:
评论

相关推荐

    SQL 语句 将一个表中用特殊字符分割的字段转换成多行数据.docx

    找了网上很多资料,都没有详细的做法有的还很复杂,自己写了个分割函数,通过直接查询就能分割多行,很方便。

    Oracle9i的init.ora参数中文说明

    它将编译程序标志列表指定为一个用逗号分隔的字符串列表。 值范围: native (PL/SQL 模块将按本机代码来编译。), interpreted (然后 PL/SQL 模块将被编译为 PL/SQL 字节代码格式), debug (PL/SQL 模块将用探测调试...

    Java面试宝典2010版

    65、去掉一个Vector集合中重复的元素 66、Collection 和 Collections的区别。 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 68、你所知道的集合类都有哪些...

    最新Java面试宝典pdf版

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...

    Java面试笔试资料大全

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...

    JAVA面试宝典2010

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...

    Java面试宝典-经典

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...

    java面试题大全(2012版)

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...

    Java面试宝典2012版

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类...

    java面试宝典2012

    65、去掉一个Vector集合中重复的元素 50 66、Collection 和 Collections的区别。 51 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 51 68、你所知道的集合类都...

    Java面试宝典2012新版

    65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...

    java面试宝典

    56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和javasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么...

    千方百计笔试题大全

    56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和javasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么...

    Java 面试宝典

    35、如何把一段逗号分割的字符串转换成一个数组? ............................................... 25 36、数组有没有 length()这个方法? String 有没有 length()这个方法? .................... 25 37、下面这...

Global site tag (gtag.js) - Google Analytics