首页 新闻 赞助 找找看

sqlserver 某列字符串集合与另一个字符串集合的查询语句

0
悬赏园豆:20 [已解决问题] 解决于 2017-06-13 17:00

表结构如下,根据keys这一列查询

 

name keys
张三 a,b,c
李四 a,c,d,e
王五 c,f

 

 查询字符串str=a,e,g;

查询结果显示:张三,李四,这两行,即keys这一列的数据跟str有交集的数据都返回,求sql语句

狼性法则的主页 狼性法则 | 初学一级 | 园豆:56
提问于:2017-05-27 14:20
< >
分享
最佳答案
0

你需要的是修改数据表结构,这结构你找谁来也没用。一定慢得半死。

收获园豆:4
爱编程的大叔 | 高人七级 |园豆:30839 | 2017-05-29 09:33

z怎么改好点呢,给个建议

狼性法则 | 园豆:56 (初学一级) | 2017-05-31 08:44

@狼性法则: 

name keys
张三 a
张三 b
张三 c
李四 c
爱编程的大叔 | 园豆:30839 (高人七级) | 2017-05-31 09:19
其他回答(5)
0
select  * from table where CHARINDEX('a', keys)>0
union
select  * from table where CHARINDEX('e', keys)>0
union
select  * from table where CHARINDEX('g', keys)>0

拆分一下str拼成这样 虽然比较low  但是能满足你的需求

收获园豆:4
liuxb1991 | 园豆:661 (小虾三级) | 2017-05-27 15:56
0

包含查询呢

收获园豆:4
风行天下12 | 园豆:3867 (老鸟四级) | 2017-05-27 16:04

(包含"a")  or  (包含"e") or (包含"g") ,因为你的str是逗号隔开的只能这么查,要是str=a 这种就直接(包含"a")就行

支持(0) 反对(0) 风行天下12 | 园豆:3867 (老鸟四级) | 2017-05-27 16:14
0
declare @temp2 table
(
    aaa varchar(10)
)
while(charindex(',',@str)>0)
begin
    insert into @temp2(aaa) select SUBSTRING(@str,charindex(',',@str)-1,1);
    set @str=SUBSTRING(@str,charindex(',',@str)+1,LEN(@str))
end
insert into @temp2(aaa) select @str

select a.name,a.keys from @temp a where exists(select aaa from @temp2 where CHARINDEX(aaa,a.keys)>0)
收获园豆:4
zhyue93 | 园豆:191 (初学一级) | 2017-05-27 16:14
0

原生的SQL和SQL SERVER内置函数基本都搞不定你的需求。

你可能需要在数据库中先编写一个自定义的函数,用于判断两个字符串按相同规则各自拆分成的集合是否有交集。

然后在你的SQL语句的WHERE中调用这个函数。

select * from yourtable where Fun(keys , 'a,e,g') ;

收获园豆:4
西漠以西 | 园豆:1675 (小虾三级) | 2017-05-27 16:17

请问这个Fun()怎么实现呢???

支持(0) 反对(0) lygui | 园豆:180 (初学一级) | 2018-12-14 15:29
0

请问楼主问题解决了没有?想请教一下

lygui | 园豆:180 (初学一级) | 2018-12-14 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册