MySQL中的模糊查询

好久都没用MyBatis框架了,今天竟让犯了一个极蠢的错误。

MySQL中的模糊查询,主要使用like关键字。

如:

select * from eq_info where eq_name like '空调%';

表示查找 eq_info 表的所有数据,eq_name字段要以空调开头,后面任意。

select * from eq_info where eq_name like '空调_';

表示查找 eq_info 表的所有数据,eq_name字段要以空调开头,后面只有一个字( 一个下划线表示一个字符)

select * from eq_info where eq_name like '%空调%';

前面后面都无所谓,只要包含有空调二字。

select * from eq_info where eq_name like '%:%%' escape ':';

如果想查找的内容里有百分号(%),但因为%本身就是通配符,这个时候就需要使用escape关键字定义一个转义字符。
比如这里定义的是冒号(:),但首先要确保,查找的内容当中没有冒号(:)这个符号,仅仅是用来作为转移符。
这里的like表示的就是,前面无所谓(%), 后面无所谓(%), 中间有个转义字符(😃, 提示要查找的就是下一个符号(%).
另外:
如果定义的转义字符是反斜杠(\),那么escape后面就不能是''了,因为\会把后面的单引号转义。应该写成这样:escape '\\'.


而我今天所犯的错误,就是使用MyBatis框架进行模糊查询的时候,语句是这样的(错误的)

<if test="equipment.name != null and equipment.name != ''">
    and e.name like '%'+#{equipment.name}+'%'
</if>

太蠢了,我竟然忘记了MySQL中字符串拼接并非使用加号(+),而应该是使用concat函数。
以下是正确的方法:

<if test="equipment.name != null and equipment.name != ''">
    and e.name like concat('%',#{equipment.name},'%')
</if>

更新
其实,使用双引号也可以,更简单,但只能使用双引号,单引号不行:

<if test="equipment.name != null and equipment.name != ''">
    and e.name like "%"#{equipment.name}"%"
</if>

posted on 2017-09-25 22:11  Yoooshiki  阅读(466)  评论(0编辑  收藏  举报

导航