2

假设我的 MySQL 数据库中有一些数据,例如:

01, 001, 2, 9, 009, 23, 15, 19, 09, 08, 1 etc. 

所以,我想对数据进行升序排序:

001, 01, 1, 1, 2, 08, 009, 09, 9, 15, 19, 23 etc. 

如果我使用ORDER BY value ASC,它不起作用。我应该如何排序?我希望第一个值是 1,然后是 2、3 ..... 这可能吗?

4

2 回答 2

3

由于它们存储为字符串,因此您可以简单地将其乘以 1,因为 mysql 会自动将值解析为数字。如果字符串以字母开头,则该值将等于 0。

ORDER BY col * 1, col

如您所见,该order by子句没有ASC关键字,因为默认情况下,优化器按升序对其进行排序。

于 2013-09-23T13:13:20.787 回答
3

你所写的应该适用于整数。不过,从您的问题来看,我假设您指定的数字被存储为字符串,因此它们被排序为字符串。

在这种情况下,您需要将它们转换为整数才能使排序正常工作。这就像做类似的事情一样简单

ORDER BY <column> / 1 ASC, <column>

乘以或除以 1 会导致数据库在排序之前将字符串转换为整数。第二种使用的手段,001总会来的1

重新阅读您的问题,听起来您只希望看到1一次,即使表格同时包含1001。在这种情况下,请执行以下操作:

SELECT DISTINCT (<column> / 1) AS intcol
FROM ...
ORDER BY intcol
于 2013-09-23T13:15:13.353 回答