我有一个表,其中一个名为price的列键入为varchar. 我想要这个列的最大值。我正在使用这个查询:
SELECT MAX(price) FROM product_management.`item_list`
Run Code Online (Sandbox Code Playgroud)
但结果是错误的。请解决这个问题。
我正在使用 [SB] SQLyog Ultimate Ver。9.0.2.0。
我有一个表,其中一个名为 price 的列键入为
varchar.
这就是问题所在。您有一列显然具有数值(假设名称price相关)并且您选择了一种字符类型。
我想要这个列的最大值。我正在使用这个查询:
SELECT MAX(price) FROM product_management.`item_list` ;
Run Code Online (Sandbox Code Playgroud)
但结果是错误的。
结果是 100% 正确,但不是您所期望的。数据库完全按照您的要求执行 - 但不是您提出的要求。
你问了MAX()一个varchar专栏,这就是你得到的。问题在于,对于 char 列,排序是按字典顺序完成的- 就像在字典中一样 - 而不是数字顺序。因为 char 类型的列具有 char 值(字符串)而不是数字。
因此,对于数据库,它们只是字符串。你可以peters-sellers在那里很有价值。char 列的值的顺序是 - 即使所有值都是视觉上的“数字”。
1
11
165
17
2
20
200
21
21789
3
35
350
9
99
997
Run Code Online (Sandbox Code Playgroud)
当然,您的查询将返回词典最大值 ( 997) 而不是数字最大值 ( 21789)。
最好的解决方案是将列转换为数字类型 - integer, decimal,取决于您希望拥有的值 - 然后MAX()andMIN()和ORDER BY将按您的预期工作。
如果您无法更改类型(通过在应用 MAX/MIN 函数之前将值转换为数字类型),则有一些解决方法,但我不建议这样做。这仍然允许在列中存储无意义的数据并可能得到转换错误(应该'peter-sellers'转换为哪个数字?)
| 归档时间: |
|
| 查看次数: |
8642 次 |
| 最近记录: |