Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于对数字字段排序的SQL查询_Mysql_Sql_Field_Sorting - Fatal编程技术网

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来存储数字呢?当然,只有当该字段的结果集中没有非数字数据时,它才会起作用。