sql中有如下通配符
含义分别为
% 包含零个或更多字符的任意字符串。
_(下划线) 任何单个字符。
[ ] 指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。
[^] 不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。
一般情况,在搜索框中输入:“_”(下划线)或者“%”(百分号),然后进行搜索,由于这两个字符是sql中的通配符,所以一般情况是会搜索到所有的结果,除非你已经考虑到了这个问题。
因为是通配符,所以按常理,需要将需要模糊查询的字符串转化成转义的字符串,写了一个方法,如下:
public static String processQuery(String queryParameter) {
if (!StringUtil.isBlank(queryParameter)) {
if (queryParameter.indexOf("%") >= 0) {
return (queryParameter.replace("_", "\\_")).replaceAll("%",
"\\\\%").trim();
} else {
return (queryParameter).trim().replace("_", "\\_");
}
} else {
return null;
}
}
比方,你传入“%hha_haoao”,该方法会返回“\%hha\_haoao”
在sql文件中使用关键字‘escape’
- Select * from service where name like '\%hha\_haoao' escape '\' ;
即把%和_当作为普通的字符串,进行模糊搜索。