小于不在 SQL 查询 PHP 中工作


Is less than not working in a SQL query PHP

我有一个这样的MYSQL表:

point     | z_id | ok|
300697.12 | 391  | 1 |
300701.88 | 391  | 1 |
300576.78 | 391  | 1 |
300576.78 | 391  | 1 |

我运行此查询

SELECT MAX( `point` ) as `max`
FROM `my_table`
WHERE `point` < 300701.88
AND `z_id`='391' AND `ok`=1

它应该返回 300697.12,但我得到 300701.88,我试图将数字放入 '',但我得到相同的结果。即使我像这样运行查询

SELECT *
FROM `my_table`
WHERE `point` < 300701.88
AND `z_id`='391' AND `ok`=1

300701.88 结果仍然存在。

我的point字段类型是 float(10,2)。

sql 将数字视为文本是否有问题?非常感谢:)

来自Mysql Docs

浮点数有时会引起混淆,因为它们是 近似值,不存储为精确值。浮点值为 在 SQL 语句中编写的值可能与值不同 在内部代表。尝试将浮点值视为 确切的比较可能会导致问题。它们也受制于: 平台或实现依赖项。浮点型和双精度型数据 类型受这些问题的影响。对于十进制列,MySQL执行 精度为 65 位十进制数字的操作,应解决 最常见的不准确问题

显然float数据类型是这里的问题,也称为近似数据类型,它不会存储确切的值。这就是应该避免float的原因。

将数据类型从float(10,2)更改为Decimal(10,2)将解决您的问题

这是演示

您混淆了float()decimal()数据类型。 MotoGP解释说,正确的类型是decimal() 。 但是,您还应该能够使用 cast() 来表达逻辑:

where point < cast('300701.88' as float(10, 2))

如果您坚持使用表中的特定定义,这可能很有用。 这个想法是为了确保将这些值作为完全相同的类型进行比较。