我有一个类型为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
我该怎么做?
答案 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