【问题标题】:MySQL MAX returns incorrect resultMySQL MAX 返回不正确的结果
【发布时间】:2016-04-01 03:29:15
【问题描述】:

我有一个表,其中“文本”列(使用文本数据类型)的数值介于 0-2000 之间。

当我执行下面的 MySQL 函数时,查询结果是 990 而不是 2000。有人能想到为什么会这样吗?

提前致谢:

SELECT max(text) FROM table

【问题讨论】:

  • 在使用max 之前尝试将text 列转换为数字类型。
  • 在哪一列应用 Max ,该列应该是整数或浮点数。

标签: mysql max


【解决方案1】:

首先将文本字段转换为unsigned int

select MAX(cast(`text`as unsigned)) from `table`;

【讨论】:

    【解决方案2】:

    您必须先将 text 的类型转换为数字,然后再将其传递给 max()

    例如:select max(cast(text as integer)) from table

    如果不是text 中的所有值都是数字,这可能会失败。

    【讨论】:

      【解决方案3】:

      这绝对不是一个“不正确”的结果。 Per the documentation:

      MAX() 可以接受一个字符串参数;在这种情况下,它返回 最大字符串值。

      当它们是字符串时,“990”肯定会出现在“2000”之后。

      【讨论】:

      • 抱歉,我知道这不是“不正确”,我不知道如何措辞。我该如何解决这个问题?
      【解决方案4】:

      您已将列设置为文本类型,因此它们以文本类型进行比较(990 大于 2000)。您应该以数字类型比较它们,您可以像 SELECT max(text*1) FROM table

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多