模糊查询(排除%等通配符并支持不连续关键字查询)

前段时间我在开发项目的时候,就关于模糊查询遇到了一点问题,主要是有两大问题:1、通配符问题;2、不连续关键字查询。下面我一一说出我是怎么解决的:

1、统配符问题

比如说在搜索框中输入‘%‘、‘_‘、‘/‘时会出错,因为这些特殊符号在sql语句查询的时候是有他特定的意义的,所有这里要对前台传过来的keyword搜索内容进行排除通配符处理,我是在工具类中写了一个方法代码如下:

/**
* 根据搜索特殊字符串
* @param id
* @return 取不到返回null
*/
public static String specialStr(String str){
Integer index=str.indexOf("%");
Integer index1=str.indexOf("_");
Integer index2=str.indexOf("/");
StringBuffer stringBuffer = new StringBuffer(str);
if(index!=-1) {
stringBuffer.insert(index, "\\");
}
if(index1!=-1) {
stringBuffer.insert(index1, "\\");
}
if(index2!=-1) {
stringBuffer.insert(index2, "\\");
}
return stringBuffer.toString();

}

然后在controller层导入该工具类,使用specialStr方法就ok了,代码如下:

String keyword = request.getParameter("keyword");
String keyword1 = "";
if (!"".equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符

}最后将keyword1作为搜索内容带到数据库中查询就行了。

2、不连续关键字查询

当在搜索框中输入不连续的关键字时,也能从数据库中搜索的到该内容,就比如:我想搜索公司名称为阿里巴巴的数据信息时,我输入阿巴也能搜索的到阿里巴巴,这该怎么处理呢?其实很简单,也是写一个工具类,将搜索框中的字符串每两个字符之间都加上一个‘%’就ok了,具体代码如下:

public static String specialStrKeyword(String str){
if(str==null||str==""){
return null;
}
StringBuffer stringBuffer = new StringBuffer(str);
int length=str.length();
for (int i = 0; i <length; i++) {
char chari=stringBuffer.charAt(i); 
if(i==0){
if(chari==‘%‘||chari==‘_‘||chari==‘\\‘){
stringBuffer.insert(i, "\\");
i++;
length++;
}
}else{
if(chari==‘%‘||chari==‘_‘||chari==‘\\‘){
stringBuffer.insert(i, "%\\");
i+=2;
length+=2;
}else{
stringBuffer.insert(i, "%");
i++;
length++;
}
}
}
return stringBuffer.toString();

}

同样在controller层导入该工具类,使用specialStrKeyword方法就ok了,代码如下:

String keyword = request.getParameter("keyword");
String keyword1 = ‘‘;
if (!"".equals(keyword) && keyword != null) {
keyword1 = CommonUtils.specialStr(request.getParameter("keyword"));// 排除%等通配符
keyword1 = CommonUtils.specialStrKeyword(keyword1);
}

最后将keyword1作为搜索内容带到数据库中查询就行了。

https://www.cnblogs.com/gaopengfirst/p/8316726.html

https://blog.csdn.net/PacosonSWJTU/article/details/51425546

原文地址:https://www.cnblogs.com/yuluoxingkong/p/10911543.html

时间: 2024-10-12 23:10:05

模糊查询(排除%等通配符并支持不连续关键字查询)的相关文章

Oracle多关键字查询

因项目需要,在某查询页面的查询字段支持多关键字查询,支持空格隔开查询条件,故实现如下: 使用的原理是:ORACLE中的支持正则表达式的函数REGEXP_LIKE, '|' 指明两项之间的一个选择.例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串. '+' 匹配前面的子表达式一次或多次. '( )' 标记一个子表达式的开始和结束位置. 如需要查询的关键字为"杆塔 鸟巢" select t.defect_phenomenon, t.defect_code, t

模糊查询中输入通配符的问题

模糊查询中输入通配符的问题: 比如说在搜索框中输入'%'.'_'.'/'时会出错,因为这些特殊符号在sql语句查询的时候是有他特定的意义的,所有这里要对前台传过来的keyword搜索内容进行排除通配符处理,我是在工具类中写了一个方法代码如下: /*** 根据搜索特殊字符串* @param id* @return 取不到返回null*/public static String specialStr(String str){Integer index=str.indexOf("%");In

word查询之使用通配符

配符可以令我们的查找工作更加灵活方便,下面就让我们来看一下这些统配符的具体用法. 1."?" 代表任意单个字符,输入几个"?"就代表几个未知字符. 比如我们输入"?国"就可以找到诸如"中国"."美国"."英国"等字符:输入"???国"可以找到"孟加拉国"等字符. 2."*"可以代表任意多个字符. 比如我们输入"*国&q

支持城市及查询条件 车行易查违章接口代码示例

车行易查违章接口可以查询支持城市及查询条件,并且查询违章,违章列表.违章时间.违章地点.违章行为.违章代码.违章扣分.违章罚款等等. 注意:目前大部分省份的交警系统数据已全省联网,指定一个省份下的任何一个地市,均可得到相同数据 接口名称:车行易查违章接口 接口平台:聚合数据 接口地址:http://v.juhe.cn/wzcxy/query 支持格式:JSON 请求方式:HTTP GET/POST 请求示例:http://v.juhe.cn/wzcxy/query?key=您申请的APPKEY&

MySQL多表查询之外键、表连接、子查询、索引

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

注:本文转自:http://www.cnblogs.com/smyhvae/p/4042303.html 本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两

T-SQL动态查询(2)——关键字查询

接上文:T-SQL动态查询(1)--简介 前言: 在开发功能的过程中,我们常常会遇到类似以下情景:应用程序有一个查询功能,允许用户在很多查询条件中选择所需条件.这个也是本系列的关注点. 但是有时候你也许会发现,有些条件或多或少是互相排斥的.比如用户通过下面其中一个条件查找信息: 1.  客户名 2.  客户ID 3.  客户身份标识号(如国内身份证.美国社保号等). 并且这三列上都有适当的索引.本系列主要研究动态SQL和OPTION(RECOMPILE)查询提示来处理需求,但是前面已经提到过,频

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据 XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你需要一个查询处理引擎. SQL Server 数据库通过XML数据类型方法的T-SQL 语句来处理XQuery. SQL Server 并不支持所有的X

Thinkphp 查询条件 and 和 or同时使用即复合查询

        thinkphp 3.2快捷查询OR查询&分割表示AND查询讲解         快捷查询方式是一种多字段查询的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询,可以实现下面的查询,例如:         一.不同字段相同的查询条件 $User = M("User"); // 实例化User对象             $map['name|title'] = 'thinkphp';