mysql针对中文和数字字段进行排序

场景1

field函数的使用

field(str,str1,str2,str3,str4…)
字段str按照字符串1、字符串2、字符串3、字符串4的顺序返回查询到的结果集。如果表字段值str不存在,放在结果集的最前面

subString

如七年级1班,想要截取第一个字符,就是substring(user_name,1,1),第一个参数写字段,第二个参数写从哪开始起始是1,第三个参数写需要截取的字符个数

完整sql

select user_name as class
from mall_user
order by field(SUBSTRING(user_name,1,1),'七','八','九');

场景2

字段中有数字和汉字,这里要求先排序数字但是要有序,然后再排序汉字,汉字按照首拼音那种方式使其有序
表结构如下

convert函数

mysql一般无法处理汉字排序问题,碰见诸如此类,使用convert函数将查询到的字段转为gbk即可排序
以下均为固定写法,用其作为排序条件则汉字就可按首拼音排序

convert(‘字段名’ using gbk);

convert的第二种用法,可以将字符串转为数值型

convert (字段名, type);

 type有三种,decimal浮点数,signed整数,unsigned无符号整数

判断字段值是数字or汉字的一种方式

添加限定条件:(字段名+0)>0 汉字为0 数字为1

一般是直接添加一列作为一个tag用来标记,更好的使用

完整sql

select user_name,(user_name+0)>0 as flag 
from mall_user
order by flag desc,(user_name+0),CONVERT(user_name using gbk);

SELECT file_name, is_dir,( file_name + 0 )> 0 AS flag,( file_name + 0 ) AS num,
CONVERT ( file_name USING gbk ) AS gbk 
FROM
	platform_resources 
ORDER BY
	is_dir DESC,
	flag DESC,
	num,
	gbk;

posted @ 2024-05-31 15:26  liftsail  阅读(108)  评论(0编辑  收藏  举报