新闻资讯表中有个关键字字段keyWords,数据存储方式是:
运动|国家|爱你。根据以上关键字,我需要过滤出与“运动”、“国家”、“爱你”有关的新闻资讯(与keywords字段匹配)。请如何写SQL语句最省性能呢?
运动|国家|爱你。根据以上关键字,我需要过滤出与“运动”、“国家”、“爱你”有关的新闻资讯(与keywords字段匹配)。请如何写SQL语句最省性能呢?
调试欢乐多
union all
select * from tb where keyWords like '%国家%'
union all
select * from tb where keyWords like '%爱你%'
from tb
where charindex('|'+'运动'+'|','|'+keyWords+'|')>0
?
where charindex('|运动|','|'+keyWords+'|')>0 or charindex('|国家|','|'+keyWords+'|')>0 or charindex('|爱你|','|'+keyWords+'|')>0
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
*/
以上都不能满足!
如果
是个字符串就不对了!declare @str = '我需要过滤出与运动'1,select * from tb where keyWords like '%运动%'
2,select *
from tb
where charindex('|'+'运动'+'|','|'+keyWords+'|')>0都不对了!
select * from table
where 字段 like('%运动%','%国家%','%爱你%')
运动|国家|爱你。不太好,应该,变成id keyWords
1 运动
2 国家
3 爱你这样就好查了!
把第一个改成 select * from tb where keyWords like '运动%'
这样可以防止全表扫描(有索引应该会稍微快点) 其他都赞同这样