为什么当我使用order by seriq asc
并且数字如“10000”“100000”“97000”
脚本向我显示结果:
1: 10000
2: 100000
3: 97000
答案 0 :(得分:3)
因为它们作为字符串存储在您的列中
1-尝试将列seriq
从VARCHAR/CHAR
更改为INT
。
2-您可以使用CAST()将字符串转换为int。例如SELECT CAST('123' AS SIGNED);
答案 1 :(得分:0)
您的seriq
列必须是数字列才能对数值进行排序。如果它是文本列,则值将按照collation按字母顺序排序。例如:
CREATE TABLE Test
(
Foo int
);
INSERT INTO Test VALUES (10000);
INSERT INTO Test VALUES (100000);
INSERT INTO Test VALUES (97000);
select * from Test order by Foo asc;
答案 2 :(得分:0)
快速修复是让MySQL将字符串转换为ORDER BY子句中的数值。
将您的查询更改为:
ORDER BY seriq+0 ASC
请注意,MySQL会尝试将任何字符串转换为数字值,将字符读取到第一个“无效”字符,例如'123A'将被转换为数值123.
答案 3 :(得分:0)
将列类型更改为int是最佳解决方案,因为它将为您提供最佳的数据存储和性能。但是,如果这不是一个选项,则可以采用以下解决方法:
select * from foo order by seqid+0
这会强制按列排序的类型转换为int,并且排序以数字形式发生。