I have a table with a column named price typed as varchar.
而且存在问题.您有一个显然具有数值的列(假设名称价格相关)并且您选择了char类型.
I want the maximum value of this column. I am using this query:
SELECT MAX(price) FROM product_management.`item_list` ;
but the result is wrong.
结果是100%正确,但不是你所期望的.数据库完全符合您的要求 – 但不是您要求的.
您要求varchar列的MAX(),这就是你得到的.问题是对于char列,排序是按字典顺序完成的 – 如字典中所示 – 而不是数字顺序.因为char类型列具有char值(字符串)而不是数字.
因此,对于数据库,它们只是字符串.你可以在那里拥有价值的彼得卖家. char列的值的排序是 – 即使所有值都是视觉上的“数字”.
1
11
165
17
2
20
200
21
21789
3
35
350
9
99
997
当然,您的查询将返回字典最大值(997)而不是数字最大值(21789).
最好的解决方案是将列转换为数字类型 – 整数,小数,取决于您期望的值 – 然后MAX()和MIN()和ORDER BY将按预期工作.
有一些解决方法,如果你不能改变类型(通过在应用MAX / MIN函数之前将值转换为数字类型),但我不推荐它.这仍然允许在列中存储无意义的数据,并可能导致转换错误(这个数字应该是’peter-sellers’转换为?)