sqlserver分隔字符串,查找父类下所有子类,删除重复字符串,计算一字符串在别一字符中出现的次数

/*dnt下面分隔字符串函数*/

create FUNCTION [dnt_split]
(
 @splitstring NVARCHAR(4000),
 @separator CHAR(1) = ','
)
RETURNS @splitstringstable TABLE
(
 [item] NVARCHAR(200)
)
AS
BEGIN
    DECLARE @currentindex INT
    DECLARE @nextindex INT
    DECLARE @returntext NVARCHAR(200)
    SELECT @currentindex=1
    WHILE(@currentindex<=datalength(@splitstring)/2)
    BEGIN
        SELECT @nextindex=charindex(@separator,@splitstring,@currentindex)
        IF(@nextindex=0 OR @nextindex IS NULL)
            SELECT @nextindex=datalength(@splitstring)/2+1
       
        SELECT @returntext=substring(@splitstring,@currentindex,@nextindex-@currentindex)
        INSERT INTO @splitstringstable([item])
        VALUES(@returntext)
       
        SELECT @currentindex=@nextindex+1
    END
    RETURN
END

 

/*查找分类下面所有子类*/

create     function   f_child(@typeId)  
  returns   @re   table(typeId  int,Level   int)  
  as  
  begin  
  declare   @l   int  
  set   @l=0  
  insert   @re   select   @typeId,@l  
  while   @@rowcount>0 

  begin  
  set   @l=@l+1  
  insert   @re   select   a.typeid,@l  
  from   product_type   a   join   @re   b   on   a.fatherId=b.typeId  
  where   b.level=@l-1
  end  
  return  
  end 

 

/*删除以逗号分隔的重复字符串*/

create function DeleteRepeatStrs
(@strs varchar(100))
returns varchar(100)
as
begin
declare @noRepeatStr varchar(100)
declare @index int
set @noRepeatStr=''
declare @id varchar(10)
declare repeatCursor cursor for select * from dnt_split(@strs,',')
open repeatCursor
fetch next from repeatCursor into @id
 while @@fetch_status=0
 begin
  select @index=charindex(@id,@noRepeatStr,0)
  if @index=0
  begin
   set @noRepeatStr=@noRepeatStr+@id+','
  end
  fetch next from repeatCursor into @id
 end
set @noRepeatStr=substring(@noRepeatStr,1,len(@noRepeatStr)-1)
close repeatCursor
deallocate repeatCursor
return @noRepeatStr
end

 

/*计算参数2在参数1中出现的次数*/

ALTER   function cisum(@thestr varchar(1000),@searchstr varchar(100))
returns smallint
as
begin
declare @a smallint,@b smallint
set @a=0
set @b=1
while @b<=len(@thestr)
    begin
      if substring(@thestr,@b,len(@searchstr))=@searchstr begin set @a=@a+1 end
      set @b=@b+1
    end
return @a
end

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值