SQL语句中的行按数值排序不取小数

Posted

技术标签:

【中文标题】SQL语句中的行按数值排序不取小数【英文标题】:Sorting rows in SQL statement by numeric value is not taking decimals 【发布时间】:2016-04-15 14:03:30 【问题描述】:

下面的 SQL 语句对我的结果进行了一些正确的排序,但它没有考虑小数点...我该怎么做?

37.5 应该在顶部。

SELECT * FROM wp_postmeta WHERE meta_key = "win_percentage" ORDER BY meta_value DESC

Array
(
    [0] => Array
        (
            [meta_id] => 417
            [post_id] => 59
            [meta_key] => win_percentage
            [meta_value] => 9.3023255814
        )

    [1] => Array
        (
            [meta_id] => 419
            [post_id] => 62
            [meta_key] => win_percentage
            [meta_value] => 6.66666666667
        )

    [2] => Array
        (
            [meta_id] => 425
            [post_id] => 64
            [meta_key] => win_percentage
            [meta_value] => 37.5
        )

    [3] => Array
        (
            [meta_id] => 433
            [post_id] => 68
            [meta_key] => win_percentage
            [meta_value] => 36.5079365079
        )

    [4] => Array
        (
            [meta_id] => 421
            [post_id] => 58
            [meta_key] => win_percentage
            [meta_value] => 32.8767123288
        )

    [5] => Array
        (
            [meta_id] => 423
            [post_id] => 63
            [meta_key] => win_percentage
            [meta_value] => 16.6666666667
        )

)

【问题讨论】:

meta_value是什么类型的字段?浮点数、小数还是 varchar? 看起来像字符串排序... 它的 varchar 都在 wordpresses 元中,所以 varchar 几乎是强制的。 ***.com/questions/4686849/… 【参考方案1】:

VARCHAR 是一个字符串变量类型,所以它的排序就像它是一个字符串一样。 6 在字符串中的 3 之后,因此在对 DESC 进行排序时,它将首先出现。

如果您希望将此特定列视为浮点数/小数以进行排序,您可以使用以下内容:

SELECT * FROM wp_postmeta WHERE meta_key = "win_percentage" ORDER BY CAST(meta_value AS FLOAT) DESC

或者您使用的数据库具有的任何数字类型:http://www.w3schools.com/sql/sql_datatypes_general.asp

【讨论】:

以上是关于SQL语句中的行按数值排序不取小数的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句——03数值类型函数

sql server 小数字段设为哪种类型?

SQL:对 SELECT 语句返回的行进行编号

sql语句 decimal(18,0)啥意思

如何计算sql中where语句中的行数?

2017年7月27~~~