2011-02-09 94 views
2
工作
SELECT 
     0x0000987C As col1, 
     substr(BinaryData,1,4) As col2, 
     CAST(0x0000987C AS SIGNED) As col3, 
     CAST(substr(BinaryData,1,4) AS SIGNED) As col4 
FROM 
(
SELECT 0x0000987C00000000 AS BinaryData 
) d 

返回二进制数据在MySQL

col1 col2 col3 col4 
---- ---- ----- ---- 
BLOB BLOB 39036 0 

当我看BLOB查看器col1col2他们都出现相同的(下面的截图)。

那么为什么col3和col4的结果不同呢?

Screenshot

回答

1

我认为这与数据类型有关。 BinaryData具有整数数据类型,但substr(BinaryData,1,4)需要一个字符串。 CAST然后与结果混淆。另外,CAST使用10来分析字符串,所以你需要做一些额外的工作。试试这个:

CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10) AS SIGNED) As col4 

这是一个怪物,但它应该给你你想要的。

+0

是的。这似乎工作,解释是有道理的。谢谢! (+ 1)尽管我用CAST(CONV(substr(HEX(BinaryData),1,8),16,10)已经签名),但稍微修改了'(你的答案当前缺少子串的长度) – 2011-02-09 18:42:55