mysql排序字段包含中文和数字

场景1

班级排序,如七年级1班、七年级2班、八年级1班、八年级3班、八年级6班等,这里需要对六、七、八、九诸如此类进行一个排序,表结构如下
在这里插入图片描述
这里采用的方法是把这一列的第一个字符取出来,然后自定义返回规则去进行排序

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)

在这里插入图片描述
排序结果如下,处理的思想可以了解

场景3

师傅的业务代码中存在正则表达式匹配相关知识,补充知识如下

正则表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值