我有一个包含如下数据的表格,我尝试通过多种选项进行排序,但总是有些想法是错误的。我的 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
关于mysql - mysql数据如何排序在数字后的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51563118/