2013-07-22 73 views
0

我在保存为varchar(25)格式的十六进制值上使用max运算符时遇到问题。十六进制字符串上的Mysql最大值

的数字是这样的:

0 
1 
0A 
0F 
FF 
10A 

现在,如果我做这样的事情:

SELECT MAX(CONV(number, 16, 10)) as number FROM `numbers` WHERE 1 

我得到的FF(255),而不是我所期望的是10A(266)

有什么问题?它是不同的长度?但为什么它为0和FF然后呢?一个提示将是伟大的!

在此先感谢。

+0

我试过你的例子,它适用于我。你的查询很好,它返回266.我错过了什么? – Akhil

+0

奇怪...我能解决这个问题对我来说,这个解决方法: max(cast(conv(session_nr,16,10)作为无符号整数))...我问自己以及为什么我的第一个解决方案不行。 – puelo

+0

可能是mysql版本的差异。那么我试着用5.0.67 – Akhil

回答

0

从文档:不同数量的基地之间http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_conv

将数字转换。返回数字N的字符串表示形式,从基本from_base转换为基本to_base。

conv的结果总是一个字符串。如果你的to_base是10,即使你认为数字应该是有意义的,它仍然会产生一个字符串。

max ing一个varchar列时,mysql可以做一些奇怪的事情,但我个人并不知道所有的细节。与B树有关。看到这个资源。 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html。奇怪的是,在这个页面上有关于这个问题的信息,但这是它的原因。

相关问题