数据库逗号分隔的字段,如何实现多条件的模糊查询

总结的几种方案

1.代码中用for循环拼接sql,类似的用CHARINDEX

-- or连接
 Name like '%福田%' or RegionName like '%南山%

-- and连接
 Name like '%福田%' and RegionName like '%南山%


2.使用“逗号”切割要查询的字符串后放到临时表,再使用CHARINDEX函数特性

create   function   func_split(@str   varchar(2000),@split   varchar(2))  
  returns   @table   table(col   varchar(20))  
  as  
    begin  
   
      while(charindex(@split,@str)<>0)  
        begin  
          insert   @table(col)   values   (substring(@str,1,charindex(@split,@str)-1))  
          set   @str   =   stuff(@str,1,charindex(@split,@str),'')  
        end  
      insert   @table(col)   values   (@str)  
      return  
    end  
  go 
--使用示例or条件连接,Tag为要搜索的数据表
select  t.id From [dbo].[func_split]('a,b',',')  s , Tag t  where charindex( s.col,t.tag)>0 group by t.id

-- 使用示例and条件连接
select  id,tag From [dbo].[func_split]('a,b',',')  s , Tag t 
  where charindex( s.col,t.tag)>0 
  group by t.id, t.tag 
  having count(t.id)=(select count(*) from [dbo].[func_split]('a,b',','))


3.字段拆分成一张中间关系表

4.使用mongodb这种方便搜索的文档型数据库

5.STRING_SPLIT(sqlserver)

6.给点其他意见....
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值