,,,,
多值模糊查询的处理
所谓多值模糊查询,就是应用程序中传递过来多个参数,对这些参数做拆分,拆分之后,对拆分结果的关键值分别做模糊查询处理
对于精确匹配时,不管是单个关键值还是多个键值,都很容易处理,备选方案也很多
对于模糊查询,单个键值也很容易,也就是……,名字像‘%参数%’(不要告诉我全模糊效率低之类的,我这里不是做性能对比的)
但是对于多个关键值的模糊处理,就不是太直接了,比如名字字段,输入的三、四、五”,要求分别按照三、四、五三个字符做模糊匹配
,
多值模糊查询可以参考如下的方式处理,欢迎提供更好的办法,谢谢了
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),影响)