mysql单字段任意字符匹配模糊查询
2016-09-22 08:48
281 查看
问题描述
给出字符串String str=”高明亮”(该字符串由前台传递,动态变化);查出用户表中用户名包含以上字符串任意字符的所有用户信息。可能的思路
错误思路一:只会查询出同时包含着三个字符的用户名。select * from user where userName like ‘%高%明%亮%’;
错误思路二:语法就不对,只能查询出包含“高”的用户名。
select * from user where userName like ‘%高%’ or '%明%' or '%亮%';
错误思路三:结果正确。动态参数,拼接sql难度大。
select * from user where userName like ‘%高%’ or userName like '%明%' or userName like '%亮%';
错误思路三:动态参数,拼接sql难度大。
select * from user where userName like ‘%高%’ or userName like '%明%' or userName like '%亮%';
错误思路四:查询结果为空,原因:mysql内部正则有自己的规则;可以考虑将“like”换成“rlike”或者“REGEXP”。不过,在hibernate中不支持这种方式;并且,查询结果还是不对(原因不太清楚)。
select * from user where userName like ‘%[高明亮]%’;
测试正确的方式
select * from user where userName REGEXP ‘高|明|亮’;
在hibernate中使用采用sql语句方式即可,不要使用hql,不支持。大致如下
Query query = getSession().createSQLQuery("select * from UsersInfor where userName REGEXP ?"); // HQL不支持 // Query query = getSession().createQuery("from " + // UsersInfor.class.getSimpleName() + " where userName REGEXP ?"); query.setParameter(0, word); query.setFirstResult(Contants.Pager.pagerSize * (page - 1));// 设置起始行 query.setMaxResults(Contants.Pager.pagerSize);// 每页条数 if (query.list() != null && !query.list().isEmpty()) { return query.list(); } else { return null; }
相关文章推荐
- 模糊查询匹配特殊字符
- thinkPHP实现多字段模糊匹配查询的方法
- 多字段模糊匹配关键字查询
- 在数据库查询任意字符所在表和字段
- 在数据库查询任意字符所在表和字段
- SQL 中查询某个字段数据匹配字符不存在
- SQL“多字段模糊匹配关键字查询”[转载]
- 【ZT】SQL实现多字段模糊匹配关键字查询
- 查询sql中常用到 like 进行字段和字符之间的匹配
- mybatis中模糊查询时一个字段匹配不定量数据解决方法
- ThinkPHP多字段匹配模糊查询
- mysql模糊查询匹配特殊字符
- SQL 多字段模糊匹配关键字查询
- 模糊查询某个字段除以100去查询,处理特殊字符和0值
- 使用combobox做模糊查询、匹配时,改从开始位置匹配为从任意位置匹配
- 声成查询的模糊匹配字符串
- 当只有一个输入条件的时匹配数据库表中多个字段模糊查询的SQL语句
- 最有效率的“多字段模糊匹配关键字查询”的解决办法
- 关于SqlServer多表根据字段值模糊匹配来连接查询的解决方法
- thinkPHP实现多字段模糊匹配查询的方法