需求
在数据库中需要根据用户名按a-z排序;
方式一
因为我们通常使用的编码都是utf-8;所以直接排序并不是按照我们所期待的拼音从a-z排序;我们需要将字符转换成gbk即可;
select * from tb_user order by convert(tb_user.`name` using gbk);
缺点
这种方式可以简单粗暴的完成我们的需求,但是有一个缺陷就是英文会排在所有中文前面;
方式二
通过编写函数,提取字符的首字母再排序;
函数定义
create function `getFirstPinyin`(P_NAME varchar(255)) RETURNS varchar(255) CHARSET utf8
DETERMINISTIC
begin
declare V_RETURN VARCHAR(255) default '';
declare V_BOOL INT DEFAULT 0;
declare FIRST_VARCHAR VARCHAR(1