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

需求说明:

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

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

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

创建表:

数据库脚本:

CREATETABLE`base_new_info_abbreviation`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar()CHARACTERSETutf8COLLATEutf8_binDEFAULTNULLCOMMENT名称,`name_all`varchar()CHARACTERSETutf8COLLATEutf8_binDEFAULTNULLCOMMENT名称详情,`create_time`datetimeDEFAULTNULLCOMMENT创建时间,`create_by`varchar(64)CHARACTERSETutf8COLLATEutf8_binDEFAULTNULLCOMMENT创建人,`last_update_time`datetimeDEFAULTNULLCOMMENT最后更新时间,`last_update_by`varchar(64)CHARACTERSETutf8COLLATEutf8_binDEFAULTNULLCOMMENT最后更新人,`deRemove`int(11)DEFAULTNULLCOMMENT删除标记1未删除0已删除,`isAvailable`int(11)DEFAULTNULLCOMMENT显示状态0未显示1显示中,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;

插入数据:

insertinto`base_new_info_abbreviation`(`id`,`name`,`name_all`,`create_time`,`create_by`,`last_update_time`,`last_update_by`,`deRemove`,`isAvailable`)values(8,d,ss,-11-:00:52,admin,-01-:00:52,admin,1,1),(76,DNA,DeoxyribonucleicAcid脱氧核糖核酸,-10-:49:52,zhanggh,-10-:56:16,zhanggh,1,1),(78,DNA,DefenseNuclearAgency国防部原子能机构,-10-:56:52,zhanggh,-10-:57:34,zhanggh,1,1),(80,DNA,DataNotAvailable数据不存在,-10-:57:27,zhanggh,-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语句:

SELECTid,NAME,name_allASname_all

FROMbase_new_info_abbreviationWHERE1=1ANDdeRemove=1ANDisAvailable=1ANDNAMELIKEUPPER(CONCAT(D,%))ORNAMELIKELOWER(CONCAT(d,%))ORDERBYNAME

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




转载请注明:http://www.aierlanlan.com/tzrz/3345.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了