除了Asc / Desc,还有其他任何使用Mysql Order By的方法吗?

时间:2016-01-14 11:06:21

标签: java mysql sql sql-order-by

抱歉,我无法正确提出问题,现在我试着解释一下我想问的问题。

例如我在mysql表中有15行,带有uniquenumber(主键ID除外)

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

现在如果我使用

SELECT * FROM info order by uniquenumber asc;

我会得到类似

的结果
1,10,11,12,13,14,15,2,3,4,5,6,7,8,9 

然而我想要

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

我怎么能在mysql中这样做?感谢

3 个答案:

答案 0 :(得分:0)

使列mysql数据类型Integer(或任何其他数值数据类型),它将解决问题。

由于字符串排序,Order by以这种方式运行。

参考:http://dev.mysql.com/doc/refman/5.7/en/numeric-types.html

答案 1 :(得分:0)

试试这个。将varchar(255)类型的唯一编号转换为INT类型

SELECT * FROM info order by CAST(uniquenumber AS INT) ASC

答案 2 :(得分:0)

有一些方法可以做到这一点,取决于你必须工作的愿望,最简单的是对值进行操作(对于exmaple来说是+0),这会在订购时将varchar转换为数值,

SELECT * FROM info ORDER BY uniquenumber+ 0 ASC

您可以通过某些数字函数进行转换

SELECT * FROM info ORDER BY ABS(uniquenumber) ASC

SELECT * FROM info ORDER BY CAST(uniquenumber as SIGNED INTEGER) ASC

哟我使用LPAD函数here description

如果您认为您的表应该包含非数字数据(因为是varchar(255)),您应该进行任何子字符串转换(See here)。例如AAA111,AAA112或111AAAA,112AAAA等。

select uniquenumber,substring(uniquenumber, X, Y) as param1CONVERT(SUBSTRING(uniquenumber, X, Y),UNSIGNED INTEGER) AS param2 from info order by param1,param2;

请参阅此问题Shorting Varchar field numerically