0

为什么当我使用order by seriq asc并有像“10000”“100000”“97000”这样的数字时

脚本显示结果:

1: 10000
2: 100000
3: 97000

?

4

4 回答 4

3

因为它们作为字符串存储在您的列中

1-尝试将列seriq从更改VARCHAR/CHARINT

2-您可以使用CAST()将字符串转换为 int。例如SELECT CAST('123' AS SIGNED);

于 2013-02-07T23:34:57.110 回答
0

您的seriq列必须是数字列,才能对值进行数字排序。如果它是文本列,则值将按照 collat​​ion 按字母顺序排序。例如:

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;

小提琴

于 2013-02-07T23:38:07.703 回答
0

快速修复是让 MySQL 在 ORDER BY 子句中将字符串转换为数值。

将您的查询更改为:

ORDER BY seriq+0 ASC

请注意,MySQL 将尝试将任何字符串转换为数值,读取字符直到第一个“无效”字符,例如 '123A' 将被转换为数值 123。

于 2013-02-07T23:39:21.287 回答
0

将列类型更改为 int 是最佳解决方案,因为它将为您提供最佳的数据存储和性能。但是,如果这不是一个选项,则可以使用以下解决方法:

select * from foo order by seqid+0

这会强制将按列排序的类型转换为 int,并且排序以数字方式进行。

于 2013-02-07T23:41:24.743 回答