VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 731|回复: 4

(求助)多关键字字符匹配问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-14 11:30:02 | 显示全部楼层 |阅读模式
如关键字 'aaa,bbb,ccc,ddd'
表#table int @id , varchar @keyword
              1   aaa,bbb,ccc,ddd
              2   aaa,ccc
              3   aaa
              4   aaa,bbb,ccc
输入关键字后匹配结果顺序
              1   aaa,bbb,ccc,ddd
              4   aaa,bbb,ccc
              2   aaa,ccc
              3   aaa







回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-4-12 23:00:01 | 显示全部楼层
select * from 表名
order by len(列名)desc--定义以字符数排序就行了
回复

使用道具 举报

0

主题

30

帖子

25.00

积分

新手上路

Rank: 1

积分
25.00
发表于 2020-4-12 23:15:01 | 显示全部楼层
create  table test(keyword  varchar(100))  
insert  test  values('aaa,bbb,ccc,ddd')  
insert  test  values('aaa,ccc')  
insert  test  values('aaa')  
insert  test  values('aaa,bbb,ccc')  

declare  @testdb  varchar(500)  
set  @testdb='aaa,bbb,ccc,ddd'  

create  table  #tmp(a  varchar(100))  
declare  @aaa  varchar(8000)  
set  @aaa='insert #tmp select * from(select '''+replace(@testdb,',','''as a union all select  ''')+''') as a'
                                                  -- #tmp的作用是将@testdb按逗号拆分
exec(@aaa)  

select * from  test where  exists (select  1  from  #tmp  where  ','+test.keyword+','  like  '%,'+a+',%')  
order by len(keyword) desc

drop  table  test,#tmp  

--结果
/*
keyword
-----------
aaa,bbb,ccc,ddd
aaa,bbb,ccc
aaa,ccc
aaa
*/
回复

使用道具 举报

1

主题

23

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-5-1 10:00:01 | 显示全部楼层
create table a(aname varchar(100))

declare @str varchar(100),@T_sql varchar(8000)
set @str ='aaaa,bbbb,cccc,dddd'
set @T_sql='insert a select'''
set @T_sql=@T_sql+replace(@str,',',''' union all select ''')+''''
--select @T_sql

exec(@T_sql)

--select * from a
declare @t table(id int identity(1,1),keyword varchar(100))
insert @t select 'aaaa,bbbb,cccc,dddd'
union all select 'aaaa,bbbb'
union all select 'aaaa'
union all select 'aaaa,bbbb,cccc'
union all select 'eeee,ffff'
--select * from @t
--select keyword,a.* from a right join @t b on charindex(','+a.aname+',',','+b.keyword+',')>0

select keyword from a inner join @t b on charindex(','+a.aname+',',','+b.keyword+',')>0 group by keyword order by count(*) desc

drop table a

昨天为了你的问题我都加了半个小时班了,当时考虑得有点多了,想把查询条件关联表中不存在的数据也检索出来,比如a,b,c,d;后来在回家的路上才想起是白考虑了!哎,浪费了半个小时
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-5-21 06:15:01 | 显示全部楼层
谢谢kxiaper和gaoqingfeng的解决方法,gaoqingfeng的方法对多关键字的匹配精度更高一些。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表