新闻资讯表中有个关键字字段keyWords,数据存储方式是:
运动|国家|爱你。根据以上关键字,我需要过滤出与“运动”、“国家”、“爱你”有关的新闻资讯(与keywords字段匹配)。请如何写SQL语句最省性能呢?

解决方案 »

  1.   

    select * from tb where keyWords like '%运动%'
    union all
    select * from tb where keyWords like '%国家%'
    union all
    select * from tb where keyWords like '%爱你%'
      

  2.   

    select *
    from tb 
    where charindex('|'+'运动'+'|','|'+keyWords+'|')>0
    ?
      

  3.   

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

  4.   

    这个需求可能需要全文索引,参考:http://blog.csdn.net/htl258/archive/2009/04/25/4116721.aspx
      

  5.   

    select * from tb 
    where charindex('|运动|','|'+keyWords+'|')>0 or charindex('|国家|','|'+keyWords+'|')>0 or charindex('|爱你|','|'+keyWords+'|')>0
      

  6.   

    CREATE TABLE k(a varchar(20))
    INSERT k SELECT 'b|aa|c'
    UNION ALL SELECT  '2|y|oo'go
    CREATE  TABLE a(a varchar(20))
    INSERT a SELECT 'asdfsjl;ka;df'
    UNION ALL SELECT 'asdf293847'
    UNION ALL SELECT 'esc'
    go
    exec master..xp_execresultset '
    SELECT  ''select * from a where a like ''''%''+replace(a,''|'',''%'''' or a like ''''%'')+''%'''''' FROM k',
    N'DB'--result
    /*a                    
    -------------------- 
    esca                    
    -------------------- 
    asdf293847
    */
      

  7.   


    以上都不能满足!
    如果 
    是个字符串就不对了!declare @str = '我需要过滤出与运动'1,select * from tb where keyWords like '%运动%'
    2,select *
    from tb 
    where charindex('|'+'运动'+'|','|'+keyWords+'|')>0都不对了!
      

  8.   

    可以考虑用 in 关键字 
    select * from table
     where 字段 like('%运动%','%国家%','%爱你%') 
      

  9.   

    新闻资讯表中有个关键字字段keyWords,数据存储方式是:
    运动|国家|爱你。不太好,应该,变成id keyWords
    1   运动
    2   国家
    3   爱你这样就好查了!
      

  10.   


    把第一个改成 select * from tb where keyWords like '运动%' 
    这样可以防止全表扫描(有索引应该会稍微快点) 其他都赞同这样