首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于一个SQL自定义函数,请进

2012-01-13 
关于一个SQL自定义函数,各位高手请进!/*说明:该函数欲实现的功能是传入4个字符串(@find,@Field,@find1,@Fi

关于一个SQL自定义函数,各位高手请进!
/*
  说明:该函数欲实现的功能是传入4个字符串(@find,@Field,@find1,@Field1),其中@find与@find1可能均为空,此时函数的返回值1,若@find与@find1均不为空(在传参数的时候将@find与@find1任一为空的情况排除了),则分别在@Field中查找@find,在@Field1中查找@find1,若两者均查找到且@find在@Field中出现的位置与@find1在@Field1中出现的位置相等(@Field,@Field1的格式一致,如@Field为:'87,89',@Field1为:'10,11',@Field、@Field1中用','分隔)则返回1,否则返回0,
例如
dbo.fn_fulfill('89','87,89','10','10,10') 返回1
dbo.fn_fulfill('87','87,89','10','10,10') 返回1
dbo.fn_fulfill('90','87,89','10','10,10') 返回0
dbo.fn_fulfill('89','87,89','10','10,11') 返回0
dbo.fn_fulfill('','87,89','','10,11') 返回1
dbo.fn_fulfill('87','87','10','10') 返回1
*/
Create function fn_fulfill (@find varchar(200), @Field varchar(200),@find1 varchar(200), @Field1 varchar(200))
returns int
as
begin
declare @return int
if( @find='' and @find1='')
begin
 set @return=1
end
else
begin
 if (PATINDEX('%'+@find+'%',@Field) = PATINDEX('%'+@find1+'%',@Field1))
  set @return=1
 else
 begin
-- if ()
-- begin
-- end
-- else
-- set @return=0
 end
end
  return(@return)
end

--print dbo.fn_fulfill('89','87,89','10','10,10')
--print dbo.fn_fulfill('87','87,89','10','10,10')

小弟初学SQL,以上是小弟写的,没有写完全,望各位高手不吝赐教,谢谢~



[解决办法]

SQL code
create function   fn_fulfill   (@find   varchar(200),   @Field   varchar(200),@find1   varchar(200),   @Field1   varchar(200)) returns   int as begin declare   @return   int declare @pos int,@pos1 intif(   @find=''   and   @find1='') begin   set   @return=1 end else begin     declare @t table(pos int)    declare @t1 table(pos int)         select @pos=charindex(','+@find+',',','+@Field+','),@pos1=charindex(','+@find1+',',','+@Field1+',')    if @pos>0 and @pos1>0    begin        while @pos>0        begin            insert @t select @pos            select @pos=charindex(','+@find+',',','+@Field+',',@pos+1)        end        while @pos1>0        begin            insert @t1 select @pos1            select @pos1=charindex(','+@find1+',',','+@Field1+',',@pos1+1)        end        if exists(select 1 from @t a,@t1 b where a.pos=b.pos)            set @return=1        else             set @return=0    end    else        set @return=0end     return(@return) end
[解决办法]
SQL code
create  function   fn_fulfill   (@find   varchar(200),   @Field   varchar(200),@find1   varchar(200),   @Field1   varchar(200)) returns   int as begin declare   @return   intdeclare @index intdeclare @index_old intset @return = 0set @index_old = 0set @index = 0if(   len(@find) > 0  and   len(@find1) > 0) begin    while 1=1         begin            set @index = charindex(@find,@field,@index)                    if @index = @index_old                 break            else                set @index_old  = @index                        if charindex(@find1,@Field1,@index) >  0             begin                set @return = 1                 break            end   --if    end; --while end else --if         set @return = 1      return(@return) end
[解决办法]
更正:
SQL code
create function   fn_fulfill   (@find   varchar(200),   @Field   varchar(200),@find1   varchar(200),   @Field1   varchar(200)) returns   int as begin declare   @return   intdeclare @index intdeclare @index_old intset @return = 0set @index_old = 0set @index = 0if(   len(@find) > 0  and   len(@find1) > 0) begin    while 1=1         begin            set @index = charindex(@find,@field,@index)                    if @index = @index_old                 break            else                set @index_old  = @index                        if charindex(@find1,@Field1,@index) = @index  --更正: > 0            begin                set @return = 1                 break            end   --if    end; --while end else --if         set @return = 1      return(@return) end 


[解决办法]

SQL code
Create function fn_fulfill (@find varchar(200), @Field varchar(200),@find1 varchar(200), @Field1 varchar(200)) returns   int as begin declare   @return   intset  @return=0if(@find=''   and   @find1='')     begin       set   @return=1     end else     begin       if   ( @find<>''   and   @find1<>'' and charINDEX(@find,@Field)   =   charINDEX(@find1,@Field1))           set   @return=1       else       begin           set   @return=0       end     end return(@return) end
[解决办法]
SQL code
Create   function   fn_fulfill   (@find   varchar(200),   @Field   varchar(200),@find1   varchar(200),   @Field1   varchar(200)) returns   int as begin declare   @return   int set @return = 0if(   @find=''   and   @find1='') begin   set   @return=1 end else begin   if   (charindex(','+@find+',',@Field+',')   =   (charindex(','+@find1+',',@Field1+',')      set   @return=1  end       return(@return) end
[解决办法]
SQL code
create  function   fn_fulfill   (@find   varchar(200),   @Field   varchar(200),@find1   varchar(200),   @Field1   varchar(200)) returns   int as begin     declare @ret int    if @find='' and @find1=''        begin            set @ret=1        end    else if @find is not null and @find1 is not null        begin            declare @f int,@f1 int            select @f=charindex(','+convert(varchar(100),@find)+',',','+convert(varchar(10),@Field)+',')                        select @f1=charindex(','+convert(varchar(100),@find1)+',',','+convert(varchar(10),@Field1)+',')            if @f=@f1 and @f<>0                begin                    set @ret=1                end            else                 begin                    set @ret=0                end        endreturn(@ret)end 

热点排行