我有如下的数据表,我试着按许多选项排序,但总是有人认为是错误的。我的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
你怎么看“类型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个字母,但总是字母和数字之间的一个空格
3条答案
按热度按时间vh0rcniy1#
如果只有一个单词后跟一个数字的数据,可以使用
substring_index
在空格处分开你的线。然后您可以按这两个不同的值排序。请注意,您需要将数字转换为int,以便mysql对其进行数字排序,而不是字母数字排序。编辑:我应该指出的是,我之所以不建议简单地按长度排序,是因为op说的是长度
type
列值是可变的(3或4个字符)。如果您的数字前面有完全相同的前缀(例如,如果总是“type####“),通常会建议使用这种方法:
sbtkgmzw2#
基础列是一个字符串,如果要进行字符串排序,则需要转换为数字。
会把它转换成一个数字。
0ve6wy6x3#
根据下面的样本数据将使用
substring
以及POSITION
```select * from types
order by CONVERT( substring(type, POSITION(' ' IN type)),UNSIGNED INTEGER) asc
http://www.sqlfiddle.com/#!9/314d43/1月
http://www.sqlfiddle.com/#!9月314日43月3日