请问查找与多个字符串相似的新闻标题,要怎么写存储过程?

eteok 2007-07-15 08:55:50
比如我现在有多个字符串,用逗号隔开
如“伊拉克,奥运会,中国,CSDN专家门诊”
新闻表有(ID,Title ,........)
要在表中查Title标题中出现了上面字符串中任意一段的记录找出来。

写存储过程要怎么写呢?
是不时要用循环语句,把字符串先按逗号分割,存储到数组里,然后再循环一个一个匹配哦?
...全文
191 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
肥胖的柠檬 2007-07-16
hellowork(一两清风)的以可以了

但如果你想放在一个表里也可以这样
declare @str varchar(200)
set @str='伊拉克,奥运会,中国,CSDN专家门诊'
Select Top 1000 ID = Identity(Int, 1, 1) Into #T From Syscolumns A, Syscolumns B

--Insert table1
Select '1', Substring(@str, B.ID, CharIndex(',', @str+ ',', B.ID) - B.ID)
From #T B
Where Substring(',' + @str, B.id, 1) = ','

Drop Table #T



declare @str varchar(200)
set @str='伊拉克,奥运会,中国,CSDN专家门诊'


select @str='select '''+replace(@str,',',''' as st union all select ''')+''''

exec(@str)
回复
eteok 2007-07-16
自顶一下!能给个具体例子最好!
回复
hillhx 2007-07-16
建议你先用循环拆分开放到临时表中,然后一个一个的找,这样IO能小一些,如果用LIKE一起找IO可能太大
如果从程序结构考虑,你也可以做一个函数,这个函数两个参数,就是传如一个标题和你要匹配的串,返回0 和1 就可以,这样如果你用这个逻辑用的地方很多,日后修改起来比较简单
回复
eteok 2007-07-16
自己搞定啦,节贴!!
才想到把它拆分成多个or like !!

declare @str varchar(100)
declare @tmpstr varchar(100)
declare @i int
declare @sql varchar(1000)
set @sql=''
set @str='别克,奥运会,中国,CSDN专家门诊'
while charindex(',',@str)>0
begin
set @i= charindex(',',@str)
if @i>0
begin
if @sql=''
begin
set @sql=@sql+'title like ''%'+substring(@str,1,@i-1)+'%'' '
end else
begin
set @sql=@sql+'or title like ''%'+substring(@str,1,@i-1)+'%'' '
end
set @str=substring(@str,@i+1,len(@str)-@i)
end
end
if @str<>''
begin
if @sql=''
begin
set @sql=@sql+'title like ''%'+@str+'%'' '
end else
begin
set @sql=@sql+'or title like ''%'+@str+'%'' '
end
end
select @sql = 'select top 20 * from news where '+ @sql +'order by id desc'
exec(@sql)
回复
hellowork 2007-07-15
declare @list varchar(1000)
set @list = '伊拉克,奥运会,中国,CSDN专家门诊'
select * from table where charindex(',' + Title + ',',',' + @list + ',') > 0
回复
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2007-07-15 08:55
社区公告
暂无公告