【问题标题】:Why do the single quotes in this SQL query affect the calculations?为什么这个 SQL 查询中的单引号会影响计算?
【发布时间】:2011-06-17 13:14:16
【问题描述】:
SELECT COUNT(*) FROM planets
WHERE ROUND(SQRT(POWER(('71' - coords_x), 2) +
                 POWER(('97' - coords_y), 2))) <= 17

==> 51

SELECT COUNT(*) FROM planets
WHERE ROUND(SQRT(POWER((71 - coords_x), 2) +
                 POWER((97 - coords_y), 2))) <= 17

==> 22

coords_xcoords_y 都是 TINYINT 字段,包含 [1, 100] 范围内的值。通常 MySQL 不关心是否引用了数字.. 但显然在这种情况下它确实如此。问题是:为什么?

【问题讨论】:

  • 永远不要依赖隐式类型转换。使用适合数据类型的文字。

标签: mysql numbers quotes


【解决方案1】:

我对 MySql 的 inerds 有点生疏,但字符串上的 &lt;= 采用字典排序而不是数字排序,即 '150' &lt; '17'

【讨论】:

  • 更改比较中的引号不会影响结果;这是由引用的“71”和“97”引起的。编辑我的问题。
  • 根据我在my answer 中引用的Type Conversion in Expression Evaluation:“在所有其他情况下,参数都作为浮点(实)数进行比较。”
【解决方案2】:

从字符串到浮点数的隐式转换可能导致结果不准确。见:Type Conversion in Expression Evaluation

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2021-03-17
    • 2014-03-21
    • 2011-04-24
    • 2011-03-19
    相关资源
    最近更新 更多