Mysql 用于对数字字段排序的SQL查询
我有一个Mysql 用于对数字字段排序的SQL查询,mysql,sql,field,sorting,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 我该怎么做 order by to_number(mycol) 如果一个值不是数字,这当然会给出一个错误。这就引出了一个问题——为什么不首先将其设置为数字列。您希望将字段转换为数字值,以便MySQL使用数字比较而不是字符串比较对其排序 SELECT
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
我该怎么做
order by to_number(mycol)
如果一个值不是数字,这当然会给出一个错误。这就引出了一个问题——为什么不首先将其设置为数字列。您希望将字段转换为数字值,以便MySQL使用数字比较而不是字符串比较对其排序
SELECT your_column
FROM your_table
ORDER BY CAST(your_column AS DECIMAL) ASC
如果您的表中有任何负数,则上述内容也适用于负数
虽然如果字段仅包含数字数据,但您确实应该将其存储为数字数据,而不是varchar。在查询中进行强制转换将在获得更多行时显著影响性能。
VARCHAR
是字符串类型,因此按字母顺序排列,这是预期的行为。如果可能,应将列更改为数字类型。如果不可能,您可以将该值转换为如下数字:
选择。。。按类型转换的顺序(列名称为十进制)
但是,如果数据库中有很多行,这将影响性能。只需在字段中添加零,而不进行任何强制转换或转换:
order by 0+yourfield ASC
为什么要使用varchar来存储数字呢?当然,只有当该字段的结果集中没有非数字数据时,它才会起作用。