一、需要模糊查询带中括号的字符串,一般写法失败:
SELECT * FROM EvaluationInformation WHERE AnnualNumber LIKE '%[2018]%';
二、中括号需要通过escape 进行转义才能查到数据:
SELECT * FROM EvaluationInformation WHERE AnnualNumber LIKE '%/[2018/]%' escape '/';
三、中括号需要提前加上‘/’ 进行转义,用java字符串replace,split转义失败:
1、String annualnumber = evaluationInfo.getAnnualnumber();
if(annualnumber.contains("[")) {
annualnumber.replaceAll("[","/[");
}
2、String annualnumber = evaluationInfo.getAnnualnumber();
if(annualnumber.contains("[")) {
annualnumber.replaceAll("\\[","/[");
}
3、String[] splits = annualnumber.split("[");
四、java 字符串split转义成功:
String[] splits = annualnumber.split("\\[");
annualnumber=splits[0];
for (int i =1; i < splits.length; i++) {
annualnumber+="/["+splits[i];
}
可以使用js转义:annualnumber.replace("[","/[").replace("]","/]");,
如果有多个中括号,js不能使用replaceAll,放弃使用js转义;中括号 '[' 或者 ']' 可能放在字符串末尾,使用java后端转义:
String annualnumber = evaluationInfo.getAnnualnumber();
if(StringUtils.isNotEmpty(annualnumber)) {
annualnumber+="1";
if(annualnumber.contains("[")) {
String[] splits = annualnumber.split("\\[");
annualnumber=splits[0];
for (int i =1; i < splits.length; i++) {
annualnumber+="/["+splits[i];
}
}
if(annualnumber.contains("]")) {
String[] splits = annualnumber.split("\\]");
annualnumber=splits[0];
for (int i =1; i < splits.length; i++) {
annualnumber+="/]"+splits[i];
}
}
evaluationInfo.setAnnualnumber(annualnumber.substring(0, annualnumber.length()-1));
}