首页 新闻 赞助 找找看

多个值对一个字段进行模糊匹配

0
悬赏园豆:40 [已解决问题] 解决于 2015-03-31 20:30
数据库A表包含一个字段 mails,例如:
[A]
id;mails
[0;'<12345@qq.com>','<11111@qq.com>','<1q344@qq.com>']
[1;'<12333@qq.com>','<12324@qq.com>','<22222@qq.com>']
[2;'<12343@qq.com>','<12224@qq.com>','<10344@qq.com>']
[4;'<12347@qq.com>','<22222@qq.com>','<11344@qq.com>']
现在有一个集合B去匹配mails字段,假如B为 [11111@qq.com,22222@qq.com]
那么返回的id 就为 0,1,4.
如何通过SQL实现,当然效率优先,求大神指点?
问题补充:

mails like '{0}' or mails like '{1}'...or mails like '{n}' 这中结构sql 我是知道的,和CHARINDEX('{0}',mails)>0 这种比起来,请问哪个效率要高点,谢谢解答

朝兮兮的主页 朝兮兮 | 初学一级 | 园豆:69
提问于:2014-05-30 07:37
< >
分享
最佳答案
0
select * from A where CHARINDEX('11111@qq.com',mails)>0 or CHARINDEX('22222@qq.com',mails)>0
收获园豆:30
alixingxing | 初学一级 |园豆:133 | 2014-05-31 19:18
其他回答(4)
-1

用自定义函数。

Firen | 园豆:5385 (大侠五级) | 2014-05-30 08:43
0

因为你的mails栏位比较特殊,存放的是带单引号''加逗号,的字符串,所以你要去查询是否有11111@qq.com或者22222@qq.com就不能简单的用mails= 'XXX',只能用like去匹配该栏位中是否有你想要的字符串,因此如2楼所示就是那个sql语句

 select id 
from xx_Table where mails like '%11111@qq.com%' or mails like '%22222@qq.com%'

希望对你有所帮助

LgV5 | 园豆:221 (菜鸟二级) | 2014-05-30 10:31
0

charindex是系统内置的函数,一般效率要高。

收获园豆:10
邀月 | 园豆:25475 (高人七级) | 2014-06-06 15:52
0

http://3871584.blog.163.com/blog/static/335265642011112911051476/这个比较详细

我是糖糖 | 园豆:446 (菜鸟二级) | 2014-10-21 20:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册