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

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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值