我现在有个Comments字段,数据类型是nvarchar(500)我想要的效果就是只要Comments字段包含我的词语就查询出来,如下:
select * from table WHERE CONTAINS(Comments,'"红楼梦"')
但是我现在有若干个词语,比如: 红楼梦,一帘幽梦,蝴蝶飞飞,雨蝶,水浒传,西游记,三国演义,笑傲江湖 等等
我要的结果是只要Comments字段包含我的若干个词语3个以上就要,我试了用sql实现不了,估计要用存储过程去处理,请大家帮忙写下。谢谢!(查询数据有20万左右,要求效率执行高)
select * from table WHERE CONTAINS(Comments,'"红楼梦"')
但是我现在有若干个词语,比如: 红楼梦,一帘幽梦,蝴蝶飞飞,雨蝶,水浒传,西游记,三国演义,笑傲江湖 等等
我要的结果是只要Comments字段包含我的若干个词语3个以上就要,我试了用sql实现不了,估计要用存储过程去处理,请大家帮忙写下。谢谢!(查询数据有20万左右,要求效率执行高)
解决方案 »
- 求助:还原数据库报错-备份集中的数据库备份与现有的数据库不同
- 很久没用SQL,求一个小触发器
- varchar(60)的字段,30万数据,用Contains,还是Like
- sql2005不能用“.”登录
- 一个简单的sql问题!一个简单的sql问题!一个简单的sql问题!一个简单的sql问题!一个简单的sql问题!
- SQL SERVER 的数据库镜像
- 请教一个远程连接的问题? 公司用代理上网(ADSL),我用客户端SQLSERVER,怎样才能连接远程SQLSERVER
- 怎样在数据库中实现对一个表的锁定 和解锁 大侠救命
- 如何解决---???--EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1
- 如何解决恶意访问注册/登录界面尝试用户名有没有被注册?
- sql中数据库字段类型问题
- mssql如何create字段呢?
set @s='红楼梦,一帘幽梦,蝴蝶飞飞,雨蝶,水浒传,西游记,三国演义,笑傲江湖'
set @s='select '''+replace(@s,',',''' as col union all select ''')+''''set @sql='select a.Comments
from [table] a,
(select * from ('+@s+') t ) b
WHERE charindex(b.col,a.Comments)>0
group by a.Comments
having count(1)>=3'--print @sqlexec (@sql)
能不能把 select '红楼梦' as col 这样的组合方式改成效率高的。谢谢!解决立刻结贴!
名称:fn_split函数.
功能:实现字符串分隔功能的函数
*/
create function dbo.fn_split(@inputstr varchar(8000), @seprator varchar(10))
returns @temp table (a varchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator , @inputstr)
while @i >= 1
begin
insert @temp values(left(@inputstr , @i - 1))
set @inputstr = substring(@inputstr , @i + 1 , len(@inputstr) - @i)
set @i = charindex(@seprator , @inputstr)
end
if @inputstr <> '\'
insert @temp values(@inputstr)
return
end
go
declare @s varchar(1000),@sql varchar(8000)
set @s='红楼梦,一帘幽梦,蝴蝶飞飞,雨蝶,水浒传,西游记,三国演义,笑傲江湖'select a.Comments
from [table] a,dbo.fn_split(@s,',') b
WHERE charindex(b.col,a.Comments)>0
group by a.Comments
having count(1)>=3
这种查询效率比较难提高,用函数试试效率会不会高一点
from [table] a,dbo.fn_split(@s,',') b
WHERE charindex(b.col,a.Comments)>0
group by a.Comments
having count(1)>=3这里的 b.col 不对吧,这个函数中没有col哦
set @s='红楼梦,一帘幽梦,蝴蝶飞飞,雨蝶,水浒传,西游记,三国演义,笑傲江湖'
--select * from dbo.fn_split(@s,',')select a.Comments
from [table] a,dbo.fn_split(@s,',') b
WHERE charindex(b.a,a.Comments)>0
group by a.Comments
having count(1)>=3
select * from table WHERE CONTAINS(Comments,'"红楼梦" OR "一帘幽梦" OR "蝴蝶飞飞" OR "雨蝶" OR "水浒传" OR "西游记" OR "三国演义" OR "笑傲江湖')
select * into #b from table WHERE CONTAINS(Comments,'三国演义')
select * into #c from table WHERE CONTAINS(Comments,'雨蝶')
........
新建一个表为bb字段为:标识列加table表中的所有列
在把#a,#b,#c表中内容追加到bb表中,最后按table表关键字分组查询bb表内容,每组条数大于3(count(*)>=3)的记录就是.