用于排序数字字段的SQL查询

时间:2010-07-16 15:09:16

标签: mysql sql field sorting

我有一个类型为VARCHAR的列,它存储数字,如10,11,16.5,24,43,12,100等。

我想订购这些字段,但它的排序方式如下:

10
11
12
16.5
100
24
43

我想要这个结果:

10
11
12
16.5
24
43
100

我该怎么做?

4 个答案:

答案 0 :(得分:6)

VARCHAR是一个字符串类型,所以它按字母顺序排序,这是预期的行为。如果可能,您应该将列更改为数字类型。如果这不可能,您可以将值转换为如此数字:

SELECT ... ORDER BY CAST(column_name AS DECIMAL)

但是,如果数据库中有很多行,这将影响您的性能。

答案 1 :(得分:1)

order by to_number(mycol)

如果一个值不是数字,这当然会给出错误。这引出了一个问题 - 为什么不首先将它作为数字列。

答案 2 :(得分:1)

您希望将字段转换为数字值,以便MySQL使用数字比较对其进行排序,而不是字符串比较。

SELECT your_column 
FROM your_table 
ORDER BY CAST(your_column AS DECIMAL) ASC

如果你的桌子中有任何一个,上面的内容也适用于负数。

虽然如果字段只包含数字数据,你真的应该存储它,而不是varchar。在您的查询中使用强制转换会在您获得更多行时显着影响性能。

答案 3 :(得分:1)

只需在您的字段中添加零,无需任何转换或转换:

order by 0+yourfield ASC