/*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 smallintasbegindeclare @a smallint,@b smallintset @a=0set @b=1while @b<=len(@thestr) begin if substring(@thestr,@b,len(@searchstr))=@searchstr begin set @a=@a+1 end set @b=@b+1 endreturn @aend