mysql 按首字母进行检索数据

一、介绍

       最近有个这样的需求,一张有大量数据元素的表,这里就暂且举例为 student 表,现在要按照学生的首字母来进行检索学生信息。比如用户输入“ZS”,获得的学生列表的姓名第一个字拼音以“Z”开头,第二个字以“S”开头。我想这个应该大家都明白什么需求,对于这个需求我之前项目中没有遇到过,至于有没有一些搜索系统或者第三方解决这个问题,我不太清楚,下面是我就这个需求进行的实现,也为以后自己遇到类似需求做参考。

二、分析

      以首字母来查询有两种情况,1、可以增加表字段,即将student表中添加一个firstwords字段来记录学生名的首字母,这样就可以直接拿此字段进行模糊匹配检索(name:“张三”,firstwords:"ZS")。2、不能增加表字段,工作中很多表或者数据库都是客户的或者是长时间不动的表,基本不建议修改的情况,无法增加首字母的相关字段,此时就需要用代码来实现此需求。这里只介绍第二种情况的实现,第一种情况太简单就不说了。

三、实现

      刚开始我看需求时,我上网各种查询,发现很多方法都不能用或者说我用不好吧,不过通过阅读网上各种方法,我自己总结了一个搜索方式,测试过没发现什么问题。

     我们知道数据库查询时可以排序查询,比如ASC关键字排序,那么汉子是通过什么排序呢,最后通过网上查阅资料,如果存储汉字的字段编码使用的是GBK字符集的话,其采用的是拼音排序的方法,UTF-8的字符集目前我没去研究,虽然mysql存储数据基本都是utf-8,但可以在查询的时候转为GBK,一样可以查询,下面是A—Z的字符集对应汉子的范围

 static {
        wordsMap = new HashMap<>();
        wordsMap.put("a","45217,45252");wordsMap.put("b","45253,45760");wordsMap.put("c","45761,46317");
        wordsMap.put("d","46318,46825");wordsMap.put("e","46826,47009");wordsMap.put("f","47010,47296");
        wordsMap.put("g","47297,47613");wordsMap.put("h","47614,48118");wordsMap.put("j","48119,49061");
        wordsMap.put("k","49062,49323");wordsMap.put("l","49324,49895");wordsMap.put("m","49896,50370");
        wordsMap.put("n","5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值