1

BINARY 文字列の最初の 4 バイトを数値として解釈したいと考えています。

(背景: BINARY(20) 列に UNHEX された SHA1 ハッシュがあり、SHA1 値の最初の 4 バイトを取得して数値にキャストまたは変換する PARTITION BY HASH 式を作成したいと考えています。 PARTITION BY HASH 式が期待する値です。)

実際には 4 バイトである必要はありません。整数値として表示されるように操作できる数バイトのほんの一部です。

4

2 に答える 2

0

私はこれが遅いことを知っていますが、

これを試して:

SELECT CONV(LEFT(HEX(<column_with_bin_str>),8), 16, 10) FROM Table;

これにより、バイナリ文字列が 16 進数に変換され、変換された文字列から最初の 8 個の 16 進数文字が取得され、それが 10 進数に変換されます。

1 バイトを表すには 2 つの 16 進文字が必要なため、最初の 8 つの 16 進文字を使用します。

于 2015-12-22T18:24:52.053 に答える
-1

次の 2 つの機能を組み合わせることができます::

SUBSTRING(str,pos,len)

文字列 str の位置 pos から len 文字の長さの部分文字列を返します。


CONV(N,from_base,to_base) -

異なる基数間で数値を変換します。基数 from_base から基数 to_base に変換された数値 N の文字列表現を返します。


編集

最初の 4 桁を取得する必要がある場合は、次100110011001 = 9使用します。

SELECT CONV(SUBSTR(10011001, 1, 4), 2, 10)

先行ゼロがある場合は、LPAD 関数を使用できます。たとえば、バイナリ値の最初の 4 桁である の場合01001100、次の0100 = 4ことができます。

SELECT CONV(
  SUBSTR(
    LPAD(
      CAST(01001100 as char), (LENGTH(CAST(01001100 as char)) + 1), '0'), 
    1, 4), 2, 10)

SQLFiddleを参照してください

于 2013-03-05T06:26:10.650 に答える