t - sql - - -多值模糊查询的处理

  

,,,,

多值模糊查询的处理

所谓多值模糊查询,就是应用程序中传递过来多个参数,对这些参数做拆分,拆分之后,对拆分结果的关键值分别做模糊查询处理

对于精确匹配时,不管是单个关键值还是多个键值,都很容易处理,备选方案也很多

对于模糊查询,单个键值也很容易,也就是……,名字像‘%参数%’(不要告诉我全模糊效率低之类的,我这里不是做性能对比的)

但是对于多个关键值的模糊处理,就不是太直接了,比如名字字段,输入的三、四、五”,要求分别按照三、四、五三个字符做模糊匹配

,

多值模糊查询可以参考如下的方式处理,欢迎提供更好的办法,谢谢了

 CREATE  TABLE  [dbo]。(学生)(,,,[S #], [varchar](50),空,,,,,[Sname], [varchar](50),空,,,,,[Ssex], [varchar] (2), NULL) INSERT  INTO  Student  VALUES (1,“张三',1)INSERT  INTO  Student  VALUES (2)“李四',1)INSERT  INTO  Student  VALUES (3)“王五',1)INSERT  INTO  Student  VALUES (4,“赵六的,1)INSERT  INTO  Student  VALUES (5,“孙七',1)——精确匹配的话,不管是单值还是多值的,都很好处理select  *,得到Student  where  Sname 拷贝(“张三”,“李四”)——单值模糊的好处理select  *,得到Student  where  Sname  Like “%五%”——多值模糊匹配,就没有这么直接了——所谓的多值模糊匹配,就是外面传递进来多个值,这些值差分开之后,每个值都做模糊查询——SQL既要写满足功能性需求,又要简明的清晰,一开始还想写函数什么玩意的,——后来想了想,可以这么处理;with  CTENameas(,,,,这是一个字符串拆分函数
  ,,,select  id, concat (‘%’s ' % '), as  name 得到dbo.f_splitStrToTable(四、五、六,“,”)
  )select  *,得到Studentwhere 存在(,,,select  1,得到CTEName  where  Sname  like 名字
  )——查询结果年代#,Sname  Ssex2 李四,13,王五,14日,赵六,1(3,行(S),影响)


t - sql - - -多值模糊查询的处理