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 は base 10 を使用して文字列を解析するため、少し余分な作業が必要です。これを試して:

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

それは怪物ですが、あなたが望むものを与えてくれるはずです。

于 2011-02-09T17:29:06.110 に答える