在使用LIKE关键字进行模糊查询时,%
、_
和[]
单独出现时,会被认为是通配符。为了在字符数据类型的列中查询是否存在百分号%
、下划线_
或者方括号[]
字符,就需要有一种方法告诉DBMS,将LIKE判式中的这些字符看作是实际值,而不是通配符。
解决方案
关键字ESCAPE允许确定一个转义字符,告诉DBMS紧跟在转义字符之后的字符看作是实际值。
因此,我们可以先将参数中的%
替换成\%
,_
替换成\_
:
1 2 3 4 5 6
| String id = activeConfigReqSource.getId(); if (id.contains("%") || id.contains("_")) { id = id.replace("%","/%").replace("_","/_"); } activeConfigReq.setId(id);
|
然后在SQL语句中通过ESCAPE关键词确定/
为转义字符:
1 2 3 4 5 6 7 8 9 10
| SELECT name,id FROM agents <where> <if test="activeConfigReq.name != null and activeConfigReq.name != ''"> AND name like CONCAT("%", </if> <if test="activeConfigReq.id != null and activeConfigReq.id != ''"> AND id like CONCAT("%", </if> </where>
|