• 欢迎访问VPS岛网站,国外VPS,国内VPS,国外服务器,国内服务器,服务器主机,测评及优惠码,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群

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

mysql技术 mb5ff40afd04638 11次浏览 已收录 0个评论

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

凯哥Java 凯哥java
需求说明:

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

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 模糊查询实现不区分大小写

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


VPS岛 的文章和资源来自互联网,仅作为参考资料,如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。丨 转载请注明mysql 模糊查询实现不区分大小写
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址