假设我的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,这可能吗?
答案 0 :(得分:3)
由于它们存储为字符串,因此可以简单地将其乘以1,因为mysql会自动将值解析为数字。如果字符串以字母开头,则该值将等于零。
ORDER BY col * 1, col
如您所见,order by
子句没有ASC
关键字,因为默认情况下,优化器会按升序对其进行排序。
答案 1 :(得分:3)
你写的内容应该与整数一起使用。但是,从您的问题来看,我假设您指定的数字被存储为字符串,因此它们被排序为字符串。
在这种情况下,您需要将它们转换为整数才能使排序正常工作。这就像做
之类的事情一样简单ORDER BY <column> / 1 ASC, <column>
乘以或除以1会导致数据库在排序之前将字符串转换为整数。第二次使用意味着001
将始终位于1
之前。
重新阅读您的问题,听起来您只希望看到1
一次,即使该表同时包含1
和001
。在这种情况下,做这样的事情:
SELECT DISTINCT (<column> / 1) AS intcol
FROM ...
ORDER BY intcol