`

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 模块将用探测调试...

    计算机二级选择题.pdf

    8. 不属于关系型数据库管理系统的是DBTG系统,它属于早期的数据库管理系统,不同于Access、SQL Server和Oracle,它们都是关系型DBMS。 9. Access是一个关系型数据库管理系统,选项C正确。 10. 在Access中,数据库...

    ABAP 基础文档

    ABAP支持多种主流数据库系统,如SQL Server、Oracle和DB2。 **ABAP语法概述** ABAP的语法结构简洁明了,由独立的语句构成。每个语句以ABAP关键字开头,单词间至少有一个空格分隔,句号用于结束语句。一行中可以...

    6天MySQL数据库学习笔记

    - **集合**:允许列中存储多个值,使用逗号分隔,用于表示多选的情况。 #### 五、总结 以上是对6天MySQL数据库学习笔记中所涉及的核心知识点的详细介绍,涵盖了数据库分类、关系型数据库基础、MySQL基本操作、...

    最新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面试题大全(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有什么...

Global site tag (gtag.js) - Google Analytics