当前位置: 代码迷 >> Sql Server >> 关于一个SQL自定义函数,请进
  详细解决方案

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

热度:425   发布时间:2016-04-27 18:45:30.0
关于一个SQL自定义函数,各位高手请进!
/*
  说明:该函数欲实现的功能是传入4个字符串(@find,@Field,@find1,@Field1),[email protected]@find1可能均为空,此时函数的返回值1,[email protected]@find1均不为空([email protected]@find1任一为空的情况排除了),[email protected]@find,[email protected]@find1,[email protected]@[email protected]@Field1中出现的位置相等(@Field,@Field1的格式一致,[email protected]:'87,89',@Field1为:'10,11',@[email protected]','分隔)则返回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([email protected]+'%',@Field) = PATINDEX([email protected]+'%',@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(',[email protected]+',',',[email protected]+','),@pos1=charindex(',[email protected]+',',',[email protected]+',')    if @pos>0 and @pos1>0    begin        while @pos>0        begin            insert @t select @pos            select @pos=charindex(',[email protected]+',',',[email protected]+',',@pos+1)        end        while @pos1>0        begin            insert @t1 select @pos1            select @pos1=charindex(',[email protected]+',',',[email protected]+',',@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
  相关解决方案