最近业务上有个需求,需要根据英文字母展示对应的人名,和我们手机的通讯录差不多
如下图所示:

通常如果表设计的时候增加了对应的首字母字段应该很好实现,那如果没加,应该怎么实现呢!

1.图示Sql

SELECT name,ELT(INTERVAL (CONV(HEX(LEFT (CONVERT (NAME USING gbk),1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z') AS firstLetter from sys_user_lawyer_info;

将字段转换为Gbk编码,取左边第一位,然后和字符集相对应上

运行结果:

2.通过mysql function(函数) 进行实现

  • 执行以下代码
CREATE FUNCTION `fristPinyin` (P_NAME VARCHAR(255)) RETURNS VARCHAR (255) CHARSET utf8 DETERMINISTIC
BEGINDECLARE V_RETURN VARCHAR (255);
DECLARE V_BOOL INT DEFAULT 0;
DECLARE V_NUM VARCHAR (2);
DECLARE FIRST_VARCHAR VARCHAR (1);
SET FIRST_VARCHAR = LEFT (CONVERT(P_NAME USING gbk), 1);
SELECTFIRST_VARCHAR REGEXP '[a-zA-Z]' INTO V_BOOL;
SELECTFIRST_VARCHAR REGEXP '[0-9]' INTO V_NUM;IF V_BOOL = 1 THEN
SET V_RETURN = FIRST_VARCHAR;
ELSEIF V_NUM = 1 THEN
SET V_RETURN = '#';ELSESET V_RETURN = ELT(INTERVAL (CONV(HEX(LEFT (CONVERT(P_NAME USING gbk), 1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z'
);
END
IF;
RETURN V_RETURN;
END;
  • 执行成功后,数据库中会多出一个函数方法

  • sql调用函数
select fristPinyin(column) firstName from table;

成功如图所示

Mysql根据拼音首字母分组和排序相关推荐

  1. mysql中英文拼音首字母获取及排序

    需求 在数据库中需要根据用户名按a-z排序: 方式一 因为我们通常使用的编码都是utf-8;所以直接排序并不是按照我们所期待的拼音从a-z排序;我们需要将字符转换成gbk即可: select * fr ...

  2. PHP利用ICU扩展intl快速实现汉字转拼音以及按拼音首字母分组排序

    ICU(International Components for Unicode)里提供了transliterator(直译器), 可以很方便把其他语言(比如简体中文)转为拉丁文表示: http:// ...

  3. Js实现中文排序,并根据拼音首字母分组

    Js实现中文排序,并根据拼音首字母分组 const pySegSort=(arr) =>{if (!String.prototype.localeCompare) return nulllet ...

  4. Js根据拼音首字母分组

    记录一下Js根据拼音首字母分组的方法 引自https://segmentfault.com/a/1190000017321316 如有侵权请联系. const pySegSort=(arr) => ...

  5. php实现通讯录按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序

    应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...

  6. 通讯录c语言编程按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序

    应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...

  7. php中按首字母查询城市,thinkphp 根据拼音首字母全国城市排序

    /** * 二维数组根据首字母分组排序 * @param  array  $data      二维数组 * @param  string $targetKey 首字母的键名 * @return ar ...

  8. 获取名字拼音首字母转换大写排序

    //排序 - (void)sequenceWithArray:(NSArray *)nameArray{ self.nameDic = [NSMutableDictionary dictionary] ...

  9. MySQL按拼音首字母排序

    若数据表tbl的某字段name的字符编码是utf8_general_ci SELECT name FROM `tbl` WHERE 1 ORDER BY CONVERT(name USING gbk) ...

最新文章

  1. pandas使用tabulate函数将pandas dataframe以类似于plsql表格的方式打印出来(printing dataframe in tabular format)
  2. 有道词典 纯净版 - imsoft.cnblogs
  3. 音乐会的等待-单调栈
  4. 刚刚,Python 3.10 正式发布了!我发现了一个可怕的功能...
  5. 最新可用NOD32免ID升级服务器
  6. 数据库技术基础:数据库与数据库管理系统概念介绍
  7. python列表的表示形式_将列表的字符串表示形式转换为Python中的列表
  8. MSNP18协议分析(一)--- MSN协议介绍
  9. 使用油猴插件,屏蔽网页上的禁止右键操作
  10. 阿里巴巴与山东省人民政府签署战略合作协议
  11. 2022年Android官方模拟器安装Xposed教程+测试工具PatDroid安装教程
  12. 《数据分析实战》--用R做交叉列表
  13. 盖世神器PowerPro使用视频教程-1. 程序的安装概述
  14. 消失的2000万辆小黄车去哪儿了?
  15. Excel数据可视化——使用图标集显示数据的意义
  16. RockyLinux9.0系统在VMware虚拟机上【保姆级】安装步骤,并修改网络配置,使用固定IP进行SSH连接【47张过程图】
  17. 2009年数学建模B题
  18. php cad如何转换成jpg,如何将cad导成jpg图片格式?
  19. 改革春风吹满地——【题解】
  20. AutoCAD插入EXCEL表和 导入AtliumDesigner 的PCB图

热门文章

  1. 卡夫卡详解_卡夫卡快速入门
  2. 广州 越秀区 正骨医院 无耻行为
  3. 压力测试随笔之:JMeter,LoadRunner 相得益彰
  4. 判断矩阵方程是否有解,并求解矩阵方程的值
  5. lesson5-基础IO
  6. HTML5-indexedDB使用总结
  7. 2020快手最新版去水印的方法
  8. 红帽认证 学习Linux的有效途径
  9. (转)无效的过程调用或参数: 'MidB'
  10. Mac必备技巧:Excel不可错过的几个快捷键