问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MySQL模糊查询详解:LIKE语句通配符使用指南

创作时间:
作者:
@小白创作中心

MySQL模糊查询详解:LIKE语句通配符使用指南

引用
CSDN
1.
https://m.blog.csdn.net/2401_87254793/article/details/142433464

本文将探讨在MySQL数据库中使用LIKE语句进行模糊查询时遇到的问题及解决方案,包括普通SQL查询中通配符的使用、LIKE语句的正确使用方法,以及在MyBatis框架中的应用。

一、问题分析

1.1 普通SQL查询语句

首先,我们来看一个普通的SQL查询语句:

String sql = "select count(*) from tab_route where cid = ?";

说明:我们直接使用通配符?来代替参数,使用Spring框架的JdbcTemplate执行增删改查操作。在这里是没有任何问题的。

1.2 普通SQL查询语句的注意事项

如果在使用通配符时遇到问题,请检查以下几点:

  1. 确保通配符?是在英文输入法下输入,避免使用中文问号。
  2. 传递的参数不需要加引号,例如下面的写法是错误的:
String sql = "select count(*) from tab_route where cid = '?'";

1.3 使用LIKE通配符进行模糊查询

接下来,我们分析一个使用LIKE语句进行模糊查询时出错的案例:

String sql = "select count(*) from tab_route where rname like '%?%'";

执行结果报错:

Parameter index out of range (1 > number of parameters, which is 0)

结果分析:查到结果数据为1,真实值应为0,参数越界,产生错误。

我们明确如下语句是没有任何问题的:

String sql = select * from tab_route where rname like '%张%';

这表明问题出在LIKE语句中通配符?的处理上。

二、LIKE语句使用通配符模糊查询的解决方案

2.1 LIKE语句的应用场景

使用LIKE通配符进行模糊查询在项目中很常见,比如在搜索框中对数据进行模糊查询。

2.2 模糊查询的正确处理方式

在SQL语句中无法直接解析'%?%',因此需要使用concat()函数对字符串进行动态拼接:

concat(str1, str2, str3...) // 会生成一个新的字符串

2.3 正确的SQL语句

正确的写法应该是:

String sql = "select count(*) from tab_route where rname like concat('%', ?, '%')";

三、MyBatis中的LIKE模糊查询

在MyBatis中使用LIKE语句进行模糊查询时,需要注意以下几点:

  • 查询子句中使用#{str}关键字:
select * from table where name like concat('%', #{name}, '%');
  • 如果需要添加排序字段,使用${str}关键字:
select * from table where name like concat('%', #{name}, '%') order by ${id};

总结

本文详细分析了在使用LIKE语句进行模糊查询时可能遇到的问题,并提供了具体的解决方案。同时,还补充了在MyBatis框架中使用LIKE语句的注意事项。这些内容对于数据库开发人员具有很高的参考价值。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号