表tb
列a
--------
md-aab22
mf-aab22
md-aac34
mk-aae30
md-aab30
mf-aab44
md-aac44
mk-aac44
mk-aae44要查询a列中有近似ab22或者aac44或者mk的所有记录,但查询条件必须用这样的输入格式:  ab22,aac44,mk   ,即用小写逗号隔开模糊查询的字符。请教各位高人如果写查询语句。不知道我表达清楚了没。

解决方案 »

  1.   


    declare @var varchar(100)set @var='ab22,aac44,mk'exec ('select * from tb where a like''%'+ replace(@var,',','%'' or a like ''%')+'%''')
      

  2.   

    create table #tb( a varchar(20))
    insert #tb select 'md-aab22'
    insert #tb select 'mf-aab22'
    insert #tb select 'md-aac34'
    insert #tb select 'mk-aae30'
    insert #tb select 'md-aab30'
    insert #tb select 'mf-aab44'
    insert #tb select 'md-aac44'
    insert #tb select 'mk-aac44'
    insert #tb select 'mk-aae44'declare @var varchar(100)set @var='ab22,aac44,mk'
    set @var=replace(@var,',','%'' or a like ''%')exec ('select * from #tb where a like''%'+@var+'%''')a
    --------------------
    md-aab22
    mf-aab22
    mk-aae30
    md-aac44
    mk-aac44
    mk-aae44(6 行受影响)
      

  3.   


    感谢,不过提示
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'replace' 附近有语法错误。
      

  4.   

    参考:http://blog.csdn.net/htl258/archive/2009/09/07/4525799.aspx
      

  5.   

    declare @tb table(a char(10))
    insert @tb
    select 'md-aab22' union all
    select 'mf-aab22' union all
    select 'md-aac34' union all
    select 'mk-aae30' union all
    select 'md-aab30' union all
    select 'mf-aab44' union all
    select 'md-aac44' union all
    select 'mk-aac44' union all
    select 'mk-aae44'declare @s varchar(50)
    set @s = 'ab22,aac44,mk,'select tb.* from @tb tb join
    (
    select '%' + ltrim(rtrim(substring(@s, id, charindex(',', @s, id) - id))) + '%' as s
    from sysobjects
    where id <= len(@s) and charindex(',', ',' + @s, id) = id
    ) b on tb.a like b.s
    /*
    a
    md-aab22  
    mf-aab22  
    md-aac44  
    mk-aac44  
    mk-aae30  
    mk-aac44  
    mk-aae44  
    */