我有一个包含数据的表,其中一个字段是'class'
当我这样做时:
select* from cvs where `Player ID` = <a_number>
我得到的数据包含从1到10的班级编号
如果我那么
select max(`Class`) from cvs where `Player ID` = <a_number>
它返回9而不是10?
我删除了第10类数据,它仍然返回9,我删除了第9类数据并返回8
Class是varchar(50)
发生了什么事?
答案 0 :(得分:2)
如果您的类字段仅填充了整数,请尝试:
select max(cast(Class as UNSIGNED))
from cvs
where `Player ID` = <a_number>
MySQL正在进行字母数字排序而不是数字排序,因为它是一个varchar。比较第一个字符时,'9'
大于'1'
,因此会在'10'
之后排序。
理想情况下,如果数据是数字,则应使用适当的数字类型而不是varchar存储。这也可以避免问题,因为在Class
列中插入了一个非整数值,现在正常工作的查询将停止运行。
答案 1 :(得分:0)
它不是一个int,所以它按字母顺序排列它们。和9> 1。
或者:
cast(variable as int)
或
convert(int, variable)