开发者社区> 啊里上海> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MYSQL数据库字母数字混合字段排序问题

简介: 对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字。数字没有前导零,长度不固定。这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排。
+关注继续查看

对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字。数字没有前导零,长度不固定。
这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排。
结果是A1,A10,A11,A12。。。。A19,A2,A20,A21。。。。
而不是我们通常感觉中的A1,A2,A3,。。。。。A10,A11,这样的结果。
想要得到正确的排序有两个办法。
一是改变字段内容结构,在数字前加上零,让所有的字段值拥有相同的长度。
二是不改变字段内容,在排序的SQL语句上想办法。


order by mid(column,2,10) +1


mid()第一个参数是字串内容,可以是字段名。第二个参数是起始字符的位置,我这里需要从第二个字符开始。第三个参数是需要取得的长度,要选一个可以包含所有字段内容长度的值,宁大勿小。
但这样取出来的还只是“数字内容的字符串”,对它排序仍然使用字符规则,不会得到我们想要的结果。
这时需要给这个结果再加上一个数值,让MySQL对它进行一次算术运算,然后得到的就是一个整型值,这时再排序就是数字顺序的结果了。
例如:
SELECT * FROM equipmentmes ORDER BY MID(eqid,2,10) +1

学习交流群:364976091

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
LeetCode(数据库)- 只出现一次的最大数字
LeetCode(数据库)- 只出现一次的最大数字
0 0
LeetCode(数据库)- 连续出现的数字
LeetCode(数据库)- 连续出现的数字
0 0
数据库中判断是否包含字符串函数的使用
数据库中判断是否包含字符串函数的使用
0 0
SQL判断某列中是否包含中文字符、英文字符、纯数字
原文:SQL判断某列中是否包含中文字符、英文字符、纯数字 一、包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二、包含英文字符 select * from 表名 where 列名 like '%[a-z]%'  三、包含纯数字 select ...
1464 0
把数据库中有关枚举项值的数字字符串转换成文字字符串
原文:把数据库中有关枚举项值的数字字符串转换成文字字符串   标题可能无法表达我的本意。比如,有这样一个枚举:   public enum MyChoice { MyFirstChoice = 0, MySecondChoice =1, MyThirdChoice = 2 }   数据库中,某表某字段保存值为"0,1,2",在显示的时候,我们希望是"第一个选择,第二个选择,第三个选择"。
789 0
批量将PowerDesigner中表字段由小写变成大写
因项目需要将项目数据库由sqlserver转为oracle, 之前有些表的字段为小写,但利用PowerDesigner反向工程再切换DBMS为Oracle11g时,发生原先表还是小写,通过以下VB脚本即可批量修改,在Tools=>Execute Commands下的Edit/Run Scripts,或者通过Ctrl+Shift+X运行以下脚本即可: '*************
831 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
冬季实战营第三期:MySQL数据库进阶实战
立即下载
OPTIMIZING SPARK DEPLOYMENTS FOR CONTAINERS: ISOLATION, SAFETY, AND PERFORMANCE
立即下载
低代码开发师(初级)实战教程
立即下载