本帖最后由 imxrea 于 2012-05-08 11:20:36 编辑

解决方案 »

  1.   


    create table imx
    (colA varchar(10), 
     colB varchar(10), 
     colC varchar(10)
    )insert into imx
    select 'L|P|K|2J', '3|3|3|0', '3' union all
    select '2J|L|P|K|F', '5|5|5|5', '5' union all
    select 'F|2J|L', '12|0|0', '12' union all
    select 'L|F|K', '0|0|0', '7'
    create function dbo.fun_imx
    (@colA varchar(10),
     @colB varchar(10),
     @colC varchar(10),
     @x varchar(10)
    ) returns char(1)
    begin
     declare @tca table(id int identity(1,1),colA varchar(10))
     declare @tcb table(id int identity(1,1),colB varchar(10))
     
     insert into @tca(colA)
     select substring(a.col,b.number,
                      charindex('|',a.col+'|',b.number)-b.number) col
     from (select @colA col) a
     inner join master.dbo.spt_values b
     on b.type='P' and substring('|'+a.col,b.number,1)='|'
     
     insert into @tcb(colB)
     select substring(a.col,b.number,
                      charindex('|',a.col+'|',b.number)-b.number) col
     from (select @colB col) a
     inner join master.dbo.spt_values b
     on b.type='P' and substring('|'+a.col,b.number,1)='|'
     
     declare @r char(1)
     if (exists(select 1 from @tca where colA=@x) 
         and exists(select 1 from @tcb b,@tca a where b.id=a.id and a.colA=@x)
         and (select b.colB from @tcb b,@tca a where b.id=a.id and a.colA=@x)=@colC)
        select @r='Y'
     else
        select @r='N'  
       
     return @r
    end
    declare @x varchar(10)
    select @x='L'select * from imx
    where dbo.fun_imx(colA,colB,colC,@x)='Y'
    colA        colB        colC
    ----------  ---------- ----------
    L|P|K|2J    3|3|3|0     3
    2J|L|P|K|F  5|5|5|5     5(2 row(s) affected)
      

  2.   

    继续测试,declare @x varchar(10)
    select @x='2J'select * from imx
    where dbo.fun_imx(colA,colB,colC,@x)='Y'colA        colB        colC
    ----------  ----------  ----------
    2J|L|P|K|F  5|5|5|5     5(1 row(s) affected)