like模糊查询下划线条件会查询出所有数据

原来条件SQL如下:

1
AND user_name LIKE '%' || ? || '%'

根据 like 模糊查询的匹配规则, 下划线 _ 表示匹配任一字符,所以会出现查询条件 输入一个 _ 就会查询出所有的数据,与预期的结果不一致。

修改方案1:

1
AND user_name LIKE '%' || ? || '%' ESCAPE '\'

这么写代表将 \ 作为转义字符(也可以是其他特殊字符),查询条件入参时需要将 _ 替换为 _,这样就能实现将下划线当作普通字符查询条件。

但是这么写需要考虑一个问题,即: \ 这个特殊字符就不能作为查询条件。

修改方案2:

1
2
3
4
5
--前后模糊查询
AND INSTR(user_name, ?) > 0

--相当于 NOT LIKE
AND INSTR(user_name, ?) = 0

总结:在涉及模糊查询的地方就需要注意这种情况,是否需要限制特殊字符。


like模糊查询下划线条件会查询出所有数据
https://binbiubiu.github.io/20191113120000/
作者
Binbiubiu
发布于
2019年11月13日