mysql - 如何在数字后排序mysql数据的第一个字母
问题描述
我有如下数据的表格,我尝试了许多选项的顺序,但总是有人认为是错误的。我的sql结果:
select type from types
order by type ASN;
TYPE 1
TYPE 10
TYPE 11
TYPE 12
TYPE 13
TYPE 14
TYPE 15
TYPE 16
TYPE 17
TYPE 18
TYPE 19
TYPE 2
TYPE 20
TYPE 21
您如何看待“TYPE 2”在类型 19 下,我想得到如下结果
TYPE 1
TYPE 2
TYPE 10
TYPE 11
TYPE 12
TYPE 13
TYPE 14
TYPE 15
TYPE 16
TYPE 17
TYPE 18
TYPE 19
TYPE 20
TYPE 21
我在表格中的数据有不同的类型并不总是 4 个字母有时有 3 个字母但总是字母和数字之间有一个空格
解决方案
如果您只有一个单词后跟一个数字的数据,您可以使用substring_index
在空格处拆分字符串。然后您可以按这两个不同的值排序。请注意,您需要将数字转换为 int,以便 MySQL 按数字而不是字母数字对其进行排序。
select
*
from types
order by
substring_index(type, " ", 1),
convert(substring_index(type, " ", -1), signed int)
编辑:我应该指出,我不建议简单地按长度工作的典型顺序是因为 OP 说type
列值的长度是可变的(3 或 4 个字符)。
如果您的号码之前有完全相同的前缀(例如,如果它始终是“type ###”),通常会建议使用这种方法:
order by char_length(type), type
推荐阅读
- reactjs - 是否可以将对从 useRef 挂钩返回的 ref 对象的引用另存为 window 属性?
- javascript - Electron-Prisma 错误:找不到模块 '.prisma/client'
- android - Android Kotlin 中的 ROOM 数据库出错
- php - 退款订单状态时未发送 WooCommerce REST API 请求
- awk - 循环遍历字段并中断
- html - 有没有办法在 vue (nuxt.js) 中进行部分文本样式化
- angular - 为什么延迟加载路由在 angular12 中不起作用?
- java - 在java中创建一个二维(2D)数组
- python - Heroku 部署中的 Cassandra 连接问题
- firebase - 如何通过firebase搜索