mysql在varchar字段中使用数字val的最大行为

时间:2011-09-05 10:31:04

标签: mysql max

我们有一个数据库表,其中包含键和值,其值可以是varchar字段中的任何值。值是关于项目的属性,一个属性是价格。

要为价格创建一个选择字段,我使用Max()函数在值列中查找似乎有效的最大值。

然后,当我们的价格超过100英镑时,他们开始没有作为最大值返回。我认为这是因为它是一个字符串值而不是数字。

当运行像select max(value) from attributes where value > 100这样的命令时会出现混淆,因为现在语句识别出101是> 100但99不是这样返回101作为最大值,但是没有where value > 100子句,99被视为> 101.为什么> 100个子句作为数字比较工作,但max不工作?

是否有这种情况发生的原因?

1 个答案:

答案 0 :(得分:19)

不要将varchar与数字混合,
想法解决方案仅存储数字用于max聚合函数的使用,
可替代地

max( cast(value as unsigned) )

当您执行MAX时,是一个转换为字符串。
在进行比较时,是否为数字转换。

<强>原因吗
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_max
(它返回最大字符串值)