我的数据表如下所示,我尝试通过许多选项进行订购,但总有些错误。我的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个字母,但字母和数字之间总是一个空格
答案 0 :(得分:2)
如果只有一个单词后跟一个数字的数据,则可以使用substring_index
在空格处分割字符串。然后,您可以按这两个不同的值排序。请注意,您需要将数字转换为整数,以便MySQL以数字方式而不是字母数字方式对其进行排序。
select
*
from types
order by
substring_index(type, " ", 1),
convert(substring_index(type, " ", -1), signed int)
编辑:我应该指出,我之所以不建议简单地按长度来执行典型的顺序,是因为OP表示type
列值的长度是可变的(3或4字符)。
如果您在数字前使用完全相同的前缀(例如,如果它始终是“类型###”),通常会建议使用以下方法:
order by char_length(type), type
答案 1 :(得分:0)
基础列是一个字符串,您正在进行字符串排序,需要转换为数字。
CONVERT(type, UNSIGNED INTEGER)
将其转换为数字。
答案 2 :(得分:0)
根据下面的示例数据,可以使用void function(struct hexColour *hc) {
// ...
}
int main(void) {
// ...
function(&hc);
// ...
}
和substring
POSITION
使用 select * from types
order by CONVERT( substring(type, POSITION(' ' IN type)),UNSIGNED INTEGER) asc
SUBSTRING_INDEX