抱歉,我无法正确提出问题,现在我试着解释一下我想问的问题。
例如我在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中这样做?感谢
答案 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 param1
和CONVERT(SUBSTRING(uniquenumber, X, Y),UNSIGNED INTEGER) AS param2 from info order by param1,param2;