你查下这个函数
charindex(',电脑主机,',','+ keyword+ ',')>0
前后都用','隔开,这样就可以避免字的重复,如查'电脑'会把电脑主机的资料也带出

解决方案 »

  1.   

    create table a(
    id int identity,
    subject varchar(10),
    keyword varchar(100)
    )insert into a values('信息主题1','电脑,电脑主机,联想电脑')
    insert into a values('信息主题2','电脑主机,联想电脑')
    insert into a values('信息主题3','显示器,三星显示器')select * from a
    where ','+keyword+',' like '%,电脑,%'--
    id      subject
    keyword                                                                                              
    ----------- ---------- -------------------------------------------------------------------1           信息主题1      电脑,电脑主机,联想电脑(所影响的行数为 1 行)
      

  2.   

    在keyword 的前和后都加上,
    变成如下信息
    ID     subject        keyword 
    1      信息主题1      ,电脑,电脑主机,联想电脑,
    2      信息主题2      ,电脑主机,联想电脑,
    3      信息主题3      ,显示器,三星显示器,
    做任何查询都把关键字加上两个,  
    比如查询“电脑”
    select * from table where keywork like '%,电脑,%'查询“电脑主机”
    select * from table where keywork like '%,电脑主机,%'
      

  3.   

    两种方法:Declare @S Nvarchar(1000)
    Set @S=N'电脑'
    Select * from TableName Where CharIndex(','+@S+',',','+keyword+',')>0OrSelect * from TableName Where ','+keyword+',' Like ('%,'+@S+',%')
      

  4.   

    这个性能好一些
    charindex(',电脑主机,',','+ keyword+ ',')>0
      

  5.   

    --建立测试环境
    Create Table TEST(
    ID Int Identity,
    subject Nvarchar(10),
    keyword Nvarchar(100))
    --插入数据
    Insert Into TEST Values(N'信息主题1',N'电脑,电脑主机,联想电脑')
    Insert Into TEST Values(N'信息主题2',N'电脑主机,联想电脑')
    Insert Into TEST Values(N'信息主题3',N'显示器,三星显示器')
    --测试
    Declare @S Nvarchar(1000)
    Set @S=N'电脑'
    --方法一:
    Select * from TEST Where CharIndex(','+@S+',',','+keyword+',')>0
    --方法二:
    Select * from TEST Where ','+keyword+',' Like ('%,'+@S+',%')
    --删除测试环境
    Drop Table TEST
    --结果
    /*
    --方法一
    ID subject keyword 
    1 信息主题1 电脑,电脑主机,联想电脑--方法二
    ID subject keyword 
    1 信息主题1 电脑,电脑主机,联想电脑
    */
      

  6.   

    谢谢各位的指导,这样应该可以达到我们目的.
    我还想问一个问题.
    两种方法(like语句和charinde()函数),从速度上考虑,我应该选择哪一种呢.
    我表中建立了索引,好像用表达式"CharIndex(','+@S+',',','+keyword+',')>0"查询,会忽略索引是不是的.
    用"like"我感觉数据很多的时候(达到60万以上时),速度会变慢(不知道大家不有这种认为).
      

  7.   

    like 和charindex 的效率都不高。建立一个明细表,将 keyword 分拆为记录是较好的选择。
      

  8.   

    zjcxc(邹建)大哥,在CSDN里面对你有点点熟悉了.
    你能不能给我讲具体点,怎么样建立明细表,分拆"keyword"字段值,能不能给具体代码.
    上面那两种方法,还有另一个问题.有时候“keyword”字符值就是一个词语,前后没有逗号(,),所以就搜索不到。例如:keyword里面就一个词语“电脑”。
    我也正想找一种更好的方法,来代替"like"语句。
    谢谢!
      

  9.   

    哦,zjcxc(邹建)说的意思是,用一个表专门保存关键词,但多个关键词分成多条记录保存,我认为这种方法的确会好些.这样我就可以不用like语句了.
    好办法!
      

  10.   

    Create Table TEST(
    ID Int Identity,
    subject Nvarchar(10),
    keyword Nvarchar(100))
    --插入?据
    Insert Into TEST Values(N'信息主?1',N'??,??主机,?想??')
    Insert Into TEST Values(N'信息主?2',N'??主机,?想??')
    Insert Into TEST Values(N'信息主?3',N'?示器,三星?示器')做任何查询都把关键字加上两个,  
    比如查询“电脑”
    select * from test where ','+keywork+',' like '%,电脑,%'查询“电脑主机”
    select * from test where +','keywork+',' like '%,电脑主机,%'