数据库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 这种比起来,请问哪个效率要高点,谢谢解答
select * from A where CHARINDEX('11111@qq.com',mails)>0 or CHARINDEX('22222@qq.com',mails)>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%'
希望对你有所帮助
charindex是系统内置的函数,一般效率要高。
http://3871584.blog.163.com/blog/static/335265642011112911051476/这个比较详细