多值模糊查询的处理

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

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

对于模糊查询,单个key值也很容易,也就是 ……where name like '%parameter%'(不要告诉我全模糊效率低之类的,我这里不是做性能对比的)

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

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

CREATE TABLE [dbo].[Student](
[S#] [varchar](50) NULL,
[Sname] [varchar](50) NULL,
[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 * from Student where Sname in ('张三','李四') --单值模糊的好处理
select * from Student where Sname Like '%五%' --多值模糊匹配,就没有这么直接了 --所谓的多值模糊匹配,就是外面传递进来多个值,这些值差分开之后,每个值都做模糊查询 --SQL既要写满足功能性需求,又要简明的清晰,一开始还想写函数什么玩意的,
--后来想了想,可以这么处理
;with CTEName
as
(
--这是一个字符串拆分函数
select id,concat('%',s,'%') as name from dbo.f_splitStrToTable('四,五,六',',')
)
select * from Student
where exists
(
select 1 from CTEName where Sname like name
) --查询结果 S# Sname Ssex
2 李四 1
3 王五 1
4 赵六 1 (3 row(s) affected)

T-SQL---多值模糊查询的处理的更多相关文章

  1. 避免SQL全表模糊查询查询 下载文件时-修改文件名字

    避免SQL全表模糊查询查询   1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效 ...

  2. 在JDBC中实现SQL语句的模糊查询

    在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...

  3. SQL中常用模糊查询的四种匹配模式&&正则表达式

    执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...

  4. sql like 通配符 模糊查询技巧及特殊字符

    最近碰到like模糊匹配的问题,找到一些答案接触迷惑,觉得有知识是自己忽略的,现在整理出来,既强化记忆,又是一次记录,以下转自一篇Blog,关于sql server like的通配符和字符带通配符的处 ...

  5. sql 根据日期模糊查询&SQL Server dateTime类型 模糊查询

    曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...

  6. SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一.别名 <typeAliases> ...

  7. C#EF中,使用类似于SQL中的% 模糊查询

    最近在做项目的时候需要使用到模糊查询,但是后台使用EF写的 而不是ADO或者是Dapper,如果是这样的话,我们就可以使用Sql语句直接进行模糊查询 现在我们需要在LINQ中使用类似于模糊查询 在EF ...

  8. 避免SQL全表模糊查询查询

    1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关系 ...

  9. SQL Server数据库————模糊查询和聚合函数

    ***********模糊查询*********/ 关键字: like (!!!!字符串类型) in (,,)  匹配()内的某个具体值(括号里可以写多个值) between... and.. 在某两 ...

随机推荐

  1. xml note

          10. 两种不同的XML分析模型: DOM:所有数据位于内存 SAX:流程性分析,不必把所有数据Load到内存中,可分析大型的XML文件,常用于Servlet-side的XML-xhtml ...

  2. ORACLE基本知识

    一.数据库名  什么是数据库名? 数据库名就是一个数据库的标识,就像人的身份证号一样.他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名.在数据库安装或创建完成 ...

  3. PC-BSD 9.2 发布,基于 FreeBSD 9.2

    PC-BSD 9.2 发布了,该版本基于 FreeBSD 9.2. 下载地址:PCBSD9.2-RELEASE-p9-10-02-2013-x64-DVD.iso (3,465MB, SHA256). ...

  4. ArcEngine 无法嵌入互操作类型

    说明: 在.net 4.0中,声明 IPoint point = new PointClass();会出现下面这个错误 错误 2 类型"ESRI.ArcGIS.Geometry.PointC ...

  5. activeMq笔记

    安装 下载地址:http://activemq.apache.org/download.html 安装教程: http://gerrard-ok.iteye.com/blog/1766203 解压缩: ...

  6. dijit样式定制(三)Button、RadioButton、CheckBox

    dijit.form.DropDownButton dijit的button中除了ComboButton使用table布局外,其他的button都是用span嵌套布局,下图中可看一下button的主要 ...

  7. 细说.NET中的多线程 (五 使用信号量进行同步)

    上一节主要介绍了使用锁进行同步,本节主要介绍使用信号量进行同步 使用EventWaitHandle信号量进行同步 EventWaitHandle主要用于实现信号灯机制.信号灯主要用于通知等待的线程.主 ...

  8. jQuery实现在线文档

    1.1.1 摘要 现在,许多网站都提供在线图片和图书阅读的功能,这种方式比下载后阅读来的直观和人性化,要实现该功能涉及到点击处理和图片动态加载. 在接下来的博文中,我们将通过Javascript方式实 ...

  9. 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法

    回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...

  10. lua以xpcall实现try/catch功能

    -- 打印错误信息 local function __TRACKBACK__(errmsg) ); print("-------------------------------------- ...