sql模糊查詢帶中括號[ ]字符串及中括號Unclosed character class near index 0 [ ^ 轉義符問題

一、需要模糊查詢帶中括號的字符串,一般寫法失敗:

        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));
		}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章