2011-02-09 1 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 

私はcol1col2のためのBLOBビューアを見ると、どちらも(下のスクリーンショット)同じように見えます。

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

はい。それはうまくいくと思われ、説明は理にかなっています。ありがとう!私は 'CAST(CONV(substr)(HEX(BinaryData)、1,8)、16,10)AS SIGNED)'を使用しましたが、若干修正しました '(あなたの答えは現在部分文字列の長さが足りません) –

+0

脂肪指。私は私の反応を編集しました。 –