php - 订购带有小数和非小数的 varchar 字段

标签 php mysql

带有小数和非小数的 Varchar 字段。

例如:

100.02
99
9
200.56
500.4
10.1
6

如何让它以 ASC 顺序显示

我尝试了下面的代码但没有成功

SELECT * FROM posts ORDER BY CAST(price AS DECIMAL(10,2)) DESC LIMIT 0, 9

还有

SELECT * FROM posts ORDER BY convert(price, decimal) DESC LIMIT 0, 9

但是上面的代码似乎都不起作用。有人可以指出我执行此操作的正确方法。

最佳答案

排序问题是由于对数字使用了 sting 类型的字段,它永远不会像人类期望的那样排序。

如果字段类型是price,你不应该使用float,而应该使用 小数或数字

The DECIMAL and NUMERIC types store exact numeric data values. These types are used when it is important to preserve exact precision, for example with monetary data.

您不想要价格的“近似”值

The FLOAT and DOUBLE types represent approximate numeric data value

关于php - 订购带有小数和非小数的 varchar 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33601943/

相关文章:

mysql - SQL:将 undef (NULL) 绑定(bind)到占位符将不会选择具有 NULL 值的行

php - mysqli 的错误实现?

php - mysqli_stmt::bind_param() 的参数 2 预期为引用,给出值

php - 无限 PHP while 循环

php - 帮助 Kohana 3 和 CRON

mysql - 隐藏重复行sql phpmyadmin

php - 在 PHP 和 MySQL 中使用日期查询

mysql - 使用 SQL (Grails) 在输出映射中的“SUM()”

mysql - 如何从 MySQL 中的存储过程中检索多行?

mysql - 需要以某种方式加速我的数据库或查询