从BINARY直接转换为INT

时间:2015-07-14 22:31:52

标签: mysql sql

我正在转换一个表,该表有一个存储整数的列作为十六进制字符串。我想将这些字符串转换为整数,因为它们占用的空间更少,更容易查询。但是,似乎MySQL缺乏从BINARY转换为INT的有效方法。

这有效:

SELECT CAST(CONV(some_column, 16, -10) AS SIGNED);
-- some_column = "49858170ef9a4f63"

...但它首先转换为十进制字符串,这不太理想。我想直接转换为整数,绕过字符串:

SELECT CONVERT(UNHEX(some_column), SIGNED);
-- some_column = "49858170ef9a4f63"

......但它不起作用;我总是得到0.它似乎与CAST做同样的事情。

如何将BINARY值直接转换为INT,而不先将其转换为字符串?从更抽象的意义上讲,如何在不更改基础数据的情况下更改值的类型?

请注意,这纯粹是MySQL;我没有使用PHP或任何其他脚本语言。

2 个答案:

答案 0 :(得分:0)

如果没有创建自己的STORED FUNCTION,我就不会认为您可以先避免转换为字符串。

我猜UNHEX不起作用,因为(至少MySQL官方的例子建议),HEX / UNHEX将字符串/十进制字节转换成十六进制字符表示,而你的十六进制字符串可能是& #39; 0X ???'格式,CONVERT将更改为' 0'。

鉴于CONV必须解析字符串,我怀疑将它转换为十进制字符串确实需要额外的开销。

答案 1 :(得分:0)

INT

conv(substr(hex(segment), -8)

ip addr

SELECT INET_NTOA(conv(substr(hex(segment), -8), 16, 10))
祝你好运。