【发布时间】:2011-09-05 10:31:03
【问题描述】:
我们有一个包含键和值的数据库表,其中值可以是 varchar 字段中的任何值。这些值是关于一个项目的属性,一个属性是价格。
为了为价格创建一个选择字段,我使用Max() 函数在价值列中找到似乎有效的最大值。
然后,当我们得到超过 100 英镑的价格时,它们开始没有作为最大值返回。我理解这是因为它是一个字符串值而不是数字。
运行select max(value) from attributes where value > 100 之类的命令时会出现混淆,因为现在该语句识别出 101 > 100 但 99 不是因此返回 101 作为最大值,但是如果没有 where value > 100 子句,99 被视为 > 101 . 为什么 > 100 子句可以作为数字比较而 max 不能?
发生这种情况有什么原因吗?
【问题讨论】:
-
varchar to number conversion for sorting in MySQL 的可能副本。不要将 varchar 与 numeric 混合,你可以这样做
max( cast(value as unsigned) )但并不理想 -
非常感谢伙计,如果您将其放入答案中,我可以接受。或者我应该关闭这个问题,因为它几乎是重复的。你知道为什么 > 子句有效吗?这才是问题的真正原因。
-
@Luke 没有类型转换
>子句也不起作用。试试:select '1000' > '99' -
这条语句:
select max(value) from attributes where value > 100确实有效,这让我们感到困惑,但select max(value) from attributes where value > 50没有,它仍然选择了 99 作为最大值。