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
返回
col1 col2 col3 col4
---- ---- ----- ----
BLOB BLOB 39036 0
当我查看col1
和col2
的BLOB查看器时,它们看起来都相同(截图如下)。
为什么col3和col4的结果不同?
答案 0 :(得分:1)
我认为它与数据类型有关。 BinaryData具有整数数据类型,但substr(BinaryData,1,4)需要一个字符串。 CAST然后与结果混淆。此外,CAST使用基数10解析字符串,因此您需要进行一些额外的工作。试试这个:
CAST(CONV(substr(HEX(BinaryData),1,8), 16, 10) AS SIGNED) As col4
这是一个怪物,但它应该给你你想要的东西。