1

我想获取 BINARY 字符串的前四个字节并将其解释为数字。

(背景:我有一个 SHA1 哈希,它已被 UNHEX'ed 到 BINARY(20) 列中,我想创建一个 PARTITION BY HASH 表达式,该表达式采用 SHA1 值的前四个字节并将其转换或转换为数字值,正如 PARTITION BY HASH 表达式所期望的那样。)

它真的不需要是四个字节;只是一小部分可以被操作成整数值的字节。

4

2 回答 2

0

我知道这已经晚了,但是,

尝试这个:

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

这会将二进制字符串转换为十六进制,从转换后的字符串中获取前 8 个十六进制字符并将其转换为十进制。

我们取前 8 个十六进制字符,因为需要两个十六进制字符来表示一个字节。

于 2015-12-22T18:24:52.053 回答
-1

您可以结合以下两个功能:

SUBSTRING(str,pos,len)

从字符串 str 返回一个子字符串 len 个字符长,从位置 pos 开始。


CONV(N,from_base,to_base) -

在不同的数字基数之间转换数字。返回数字 N 的字符串表示形式,从基础 from_base 转换为基础 to_base。


编辑

如果您需要获取其中的前 4 个数字,请10011001使用1001 = 9

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

如果您有前导零,您可以使用 LPAD 函数,例如二进制值的前 4 位数字010011000100 = 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 回答