mysql 模糊查询实现不区分大小写

Posted 凯哥Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 模糊查询实现不区分大小写相关的知识,希望对你有一定的参考价值。

需求说明:

有时候,我们需要从数据库中模糊查询,但是字母有大写也有小写。

1:在执行查询的时候,需要忽略大小写。

2:以输入字母开头进行查询的

创建表:

mysql



数据库脚本:

CREATE TABLE `base_new_info_abbreviation` (

 `id` int(11) NOT NULL AUTO_INCREMENT,

 `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 名称,

 `name_all` varchar(5000) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 名称详情,

 `create_time` datetime DEFAULT NULL COMMENT 创建时间,

 `create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 创建人,

 `last_update_time` datetime DEFAULT NULL COMMENT 最后更新时间,

 `last_update_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 最后更新人,

 `deRemove` int(11) DEFAULT NULL COMMENT 删除标记1未删除0已删除,

 `isAvailable` int(11) DEFAULT NULL COMMENT 显示状态0未显示1显示中,

 PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

插入数据:

insert  into `base_new_info_abbreviation`(`id`,`name`,`name_all`,`create_time`,`create_by`,`last_update_time`,`last_update_by`,`deRemove`,`isAvailable`) values (8,d,ss,2016-11-09 18:00:52,admin,2017-01-09 18:00:52,admin,1,1),(76,DNA,Deoxyribonucleic Acid 脱氧核糖核酸,2017-10-20 10:49:52,zhanggh,2017-10-20 10:56:16,zhanggh,1,1),(78,DNA,Defense Nuclear Agency   国防部原子能机构,2017-10-20 10:56:52,zhanggh,2017-10-20 10:57:34,zhanggh,1,1),(80,DNA,Data Not Available   数据不存在,2017-10-20 10:57:27,zhanggh,2017-10-20 10:57:34,zhanggh,1,1);


mysql

假设用户现在要查询name是D或者d开头的数据怎么?

解决需求一,忽略大小写的。可以先查询大写,在查询小写。然后union 下

先查询出所有小写字母d开头的:

mysql


在查询出所有大写字母D开头的

mysql


使用union 进行连接。

mysql


当然这样也可以得到最终的结果。但是这样执行从效率上来说很不好。

解决需求二:以输入字母开头进行模糊查询

在上面语句中我们可以看到使用的是‘d%’或者是D%这样看上去好像有点不是很好。

综上要想解决并优化实现查询 D或者d开头的可以使用到以下三个函数:

函数一:upper(keyword )。大写函数

函数二:lower(keyword )。小写函数

函数三:concat(str1,str2)。连接函数。

接下来查看优化后的sql语句:

SELECT id,NAME,name_all AS name_all

   FROM  base_new_info_abbreviation 

   WHERE 1=1 AND deRemove=1 AND  isAvailable=1

   AND NAME LIKE UPPER(CONCAT(D,%))OR NAME LIKE LOWER(CONCAT(d,%))

   ORDER BY NAME 


mysql


同样达到我们需要的结果了。

微信公众号:kaigejava


以上是关于mysql 模糊查询实现不区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

mysql模糊查询区分大小写的问题~~

mysql模糊查询区分大小写

mysql模糊查询是否区分大小写?

mysql模糊查询语句区分大小写

SQL语句中模糊查询中不区分大小写怎么写?如:select × from table where number like‘%PK%’

mysql数据查询分不分大小写