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