首页 > 解决方案 > 如何在数字后排序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 个字母但总是字母和数字之间有一个空格

标签: mysql

解决方案


如果您只有一个单词后跟一个数字的数据,您可以使用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

推荐阅读