mysql - 为什么 MySQL 将 1000.00 视为小于 34.00 的数字?

标签 mysql

我有 2 种产品,一种是 1000 美元,所以我将其价格插入数据库:

1000.00

还有 34 美元,所以我插入:

34.00

但是当我按价格(从低到高)对产品进行排序时,1,000 美元的产品排在 34 美元的产品之前,这是为什么?

查询:

SELECT * FROM products ORDER BY price ASC;

编辑

这是一个 varchar 字段。我会使用 int,但我需要小数点才能被接受。

如果我将它转换为 int,有什么方法可以转换成这样:

10000

当显示给用户时,以更用户友好的形式显示:

10,000 美元

顺便说一句,我正在使用 PHP 编写脚本。

最佳答案

因为字符串是按字典顺序排序的。您需要将其转换为数字以进行数字排序。

SELECT * FROM products ORDER BY CAST(price AS DECIMAL) ASC;

(最好将价格存储为美分的倍数整数(100000 和 3400),或使用 DECIMAL。)


编辑:您可以使用 money_format in PHP将数字转换为货币格式。参见 http://www.ideone.com/VEcgy举个例子。

关于mysql - 为什么 MySQL 将 1000.00 视为小于 34.00 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172499/

相关文章:

mysql - 难以使用 LAG 获取每月进度百分比

mysql - 错误代码 : 1136. 列计数与第 1 行的值计数不匹配,为什么?

mysql - 使用 WHERE IN () 更新的查询或单个查询之间有什么区别

java - "Connection is not associated with a managed connection"更改MySQL的JDBC驱动程序后

带有内部查询的mysql

mysql - 从数据库中带有纬度/经度的邮政编码进行地理搜索

python - 如何通过避免行名称等来仅打印数据库中的值(在 Django 中)

php - 将查询结果显示在表格中

mysql - 如何在MySQL中设计这个DB结构?

mysql - 无法在共享主机上使用 REPLACE 语法