假如现在有一篇文章其关键字(字段A)是“中国|健康”(与“|”分隔的数组),那么如何与这个关键字中查询另一文章的标题(字段B)是否出现该关键字“中国”或“健康”。从而实现文章的相关链接。像下面的查查询是否正确keyword=split(rs("keyword"),"|")
for i=0 to ubound(keyword)-1
  word= " charindex(','"&keyword(i)&"',',','+B+',')>0 or"&word
next
 word=left(word,len(word)-2)  '处理去最后的OR
select * from table where &word& order by id desc 请高手指教。谢谢

解决方案 »

  1.   

    declare @s varchar(200)
    set @s='中国|健康'
    select * from 表 where charindex('|'+B+'|','|'+@s+'|')>0
      

  2.   

    --或者:declare @s varchar(200)
    set @s='中国|健康'
    select * from 表 where '|'+B+'|' like '%|'+@s+'|%'
      

  3.   

    --写反了.应该如下:
    declare @s varchar(200)
    set @s='中国|健康'
    select * from 表 where '|'+B+'|' like '%|'+@s+'|%'
    -->
    declare @s varchar(200)
    set @s='中国|健康'
    select * from @t where '|'+@s+'|' like '%|'+B+'|%'
      

  4.   

    我试地以上的几种方法,查询语句都属正确,但是查询不到记录。zlp321002(龙卷风2006) 朋友能否解释一下如上方法呢?
      

  5.   

    declare @s varchar(200),@sql varchar(2000)
    set @s='中国|健康'set @sql='select * from 表 where B like ''%'+replace(@s,'|','%'' or B like ''%')
             +'%'''exec (@sql)
      

  6.   

    keyword=split(rs("keyword"),"|")
    for i=0 to ubound(keyword)-1
      word= " SELECT '"&keyword(i)&"' K UNION ALL "
    next
    word="(" & Left(word,Len(word)-10) & ") b"SQL="SELECT a.* from [table] a INNER JOIN " & word & " ON CHARINDEX('|' + k + '|','|'+B+'|')>0"随便写的,可能有手误,如果报错的话,请说说哪里提示。试试吧。
      

  7.   

    declare @s nvarchar(200),@sql nvarchar(2000)
    set @s=N'中国|健康'
    create table #(keyword nvarchar(200))
    set @sql='insert # select N''%' 
    + replace(@s, '|','%'' union select N''%')
    +'%'''
    exec(@sql)
    select * from 表 a
    where exists(
      select * from # where a.B like keyword)
    drop table #
      

  8.   

    declare @t table( b varchar(20))
    insert into @t select '中国'
    union all select 'ss'
    declare @s varchar(200)
    set @s='中国|健康'
    select * from @t where '|'+@s+'|' like '%|'+B+'|%'  select * from @t where charindex('|'+B+'|','|'+@s+'|')>0/*
    b
    --------------------
    中国(1 行受影响)b
    --------------------
    中国(1 行受影响)
    */
      

  9.   

    楼上的写法是有问题的。
    你试试declare @t table( b varchar(20))
    insert into @t select '中国人民'
    union all select 'ss'这种写法只能匹配字串值相等,而不是字串包含
      

  10.   

    请问 zlp321002(龙卷风2006) 语句中的 'B'是什么意思。
      

  11.   

    zjcxc(邹建) 大师的最好,又学一招。
      

  12.   

    我按楼主的asp代码原思路改的。如果按邹老大的写法.
    create table tb( fb varchar(20))
    insert into tb select '中国人民'
    union all select 'ssxxssxxxv'
    declare @s nvarchar(200),@sql nvarchar(2000)
    set @s=N'中国|健'
    set @sql='(select N''' 
    + replace(@s, '|',''' K union select N''')
    +''')'
    select @sql='select a.* from tb a inner join ' + @sql + ' b on charindex(K,fb)>0'
    exec(@sql)drop table tb