我如何对在MySQL中保存为字符串的数字进行排序?

时间:2013-09-23 13:11:49

标签: php mysql

假设我的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,这可能吗?

2 个答案:

答案 0 :(得分:3)

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

ORDER BY col * 1, col

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

答案 1 :(得分:3)

你写的内容应该与整数一起使用。但是,从您的问题来看,我假设您指定的数字被存储为字符串,因此它们被排序为字符串。

在这种情况下,您需要将它们转换为整数才能使排序正常工作。这就像做

之类的事情一样简单
ORDER BY <column> / 1 ASC, <column>

乘以或除以1会导致数据库在排序之前将字符串转换为整数。第二次使用意味着001将始终位于1之前。

重新阅读您的问题,听起来您只希望看到1一次,即使该表同时包含1001。在这种情况下,做这样的事情:

SELECT DISTINCT (<column> / 1) AS intcol
FROM ...
ORDER BY intcol