专栏首页凯哥Javamysql 模糊查询实现不区分大小写

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

需求说明:

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

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

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

创建表:

请点击此处输入图片描述

数据库脚本:

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);

请点击此处输入图片描述

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

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

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

请点击此处输入图片描述

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

请点击此处输入图片描述

使用union 进行连接。

请点击此处输入图片描述

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

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

在上面语句中我们可以看到使用的是‘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

请点击此处输入图片描述

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用mysql触发器新增或修改一个表后,触发到另一个表

    在工作中,有时候,我们需要备份一个表。或者是在向一张表中添加一条数据后,另一张同结构的表也要添加用于备份。如下:

    凯哥Java
  • Java中反射学习系列教程之二

    在上一篇文章《Java中反射学习系列教程之一》中我们学了什么是反射;反射中的反字怎么理解;以及反射的特点。今天我们主要讲的内容:

    凯哥Java
  • springboot系列教程导学篇

    Spring Boot 虽然凯哥从2015年年初开始就接触了spring boot。但是在之后的公司中都没有使用到,来来回回学了好几次了。正好,公司现在准备使用...

    凯哥Java
  • EasySwoole之链路追踪

    来自北溟有鱼QAQ https://www.umdzz.cn

    北溟有鱼QAQ
  • 【编程经验】C语言中的宏陷阱 #define SQU(x) x*x

    咳咳咳,今天讲讲C中宏定义(片面),希望对小伙伴们有帮助,开始了: 有同学写过或者想写这样的宏定义吗? 求两个或几个数的乘积: #define SQU(...

    编程范 源代码公司
  • Win32线程安全问题.同步函数

      通过上面几讲.我们知道了线程怎么创建.线程切换的原理(CONTEXT结构) 每个线程在切换的时候都有自己的堆栈.

    IBinary
  • Swift 两数之和 - LeetCode

    韦弦zhy
  • linux:dialog表单提交示例

    dialog是个linux命令行的ui显示工具,可以在命令行显示更加友好的用户界面,系统如果没有安装需要手工安装:

    用户1148648
  • cordova学习八 跨域请求

               Cordova的跨域请求处理其实很简单,只需在对应平台的Config.xml文件中,将            platforms\平台名\...

    cfs
  • 数据对齐-编辑距离算法详解(Levenshtein distance)

    在信息论、语言学和计算机科学中,Levenshtein distance是用于测量两个字符串之间差异的字符串度量。非正式的说就是两个单词之间的Levenshte...

    匠心Java

扫码关注云+社区

领取腾讯云代金券