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

退货

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

当我查看 BLOB 查看器时col1col2它们看起来都相同(下面的屏幕截图)。

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

截屏

4

1 回答 1

2

我认为这与数据类型有关。BinaryData 具有整数数据类型,但 substr(BinaryData,1,4) 需要一个字符串。然后 CAST 对结果感到困惑。此外,CAST 使用基数 10 解析字符串,因此您需要做一些额外的工作。试试这个:

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

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

于 2011-02-09T17:29:06.110 回答