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

来源:互联网 发布:土建施工员软件 编辑:程序博客网 时间:2024/06/06 10:47

/*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

 

原创粉丝点击