mysql比较忽略的 float

标签 mysql sql select floating-point

我正在尝试比较两个 float 。 我已经在 stackoverflow 上看到了很多问题,但还没有找到解决方案。

$sql = "SELECT price FROM list
        WHERE price != '".(float)$price."'";

价格为“6.30” 在 DB 中,我想获得除价格 6.30 之外的所有结果。但它完全忽略了它。

我知道这与 float 有关。我无法编辑数据库表,不幸的是,这不是一个选项。

有没有其他方法可以只使用 mysql 来做到这一点?

最佳答案

比较 float 是非常危险的,因为看起来相同的值可能略有不同。一种方法是:

WHERE ABS(price - $price) < 0.001

这样做的问题是它不能使用索引。您可以改为使用:

WHERE price >= $price - 0.001 and price > $price + 0.001

当然,0.001 是任意的容差度量。您可能需要更小或更大的值。

而且,我应该提到十进制/数字值可以安全地进行比较。

关于mysql比较忽略的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594333/

相关文章:

mysql - 我的查询需要稍微具体一些

sql - 自动增加 SQL Azure 配额

python - 如何返回 .fetchone() 返回的元组中的单个元素?

postgresql - 如何在postgresql中正确选择字符变化数据

ruby-on-rails-3 - 如何将一整天与日期时间字段匹配?

mysql - 具有列 SQL 值的 GROUP BY

php - MySQL OR 在查询中

php - 将帖子上传到 Wordpress 数据库时出错?

python - 使用外键从另一个模型访问对象

php - 无法从 PHP 上的 MySQL 响应中检索信息