首页 >数据库 >mysql教程 >为什么我的 MySQL SELECT 语句在比较浮点值与常量时不返回任何行?

为什么我的 MySQL SELECT 语句在比较浮点值与常量时不返回任何行?

DDD
DDD原创
2024-10-29 10:51:02505浏览

Why Does My MySQL SELECT Statement Return No Rows When Comparing a Float Value to a Constant?

解决 MySQL 选择中的浮点差异

当执行带有 WHERE 子句的 SELECT 语句来将浮点值与常量进行比较时,用户可能会遇到意想不到的结果。例如,以下查询不返回任何行:

<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>

但是,删除价格比较条件会产生正确的行:

<code class="sql">SELECT * FROM `table`;</code>

这种差异可以归因于 MySQL 处理的方式浮点精度。虽然从数据库检索到的值显示“101.31”,但由于浮点算术不准确,它可能与 WHERE 子句中使用的实际常量略有不同。

解决方案:转换为 DECIMAL

要解决此问题,可以在 WHERE 子句中将价格列转换为 DECIMAL 类型:

<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>

这可确保数据库值和常量都表示为 DECIMAL,消除任何潜在的精度问题。

替代解决方案:更改列类型

作为替代方案,请考虑直接将价格列的数据类型更改为 DECIMAL。 DECIMAL 在处理货币值时提供更高的精度和规模,无需在 SELECT 查询中进行转换。

以上是为什么我的 MySQL SELECT 语句在比较浮点值与常量时不返回任何行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn