我想获取 BINARY 字符串的前四个字节并将其解释为数字。
(背景:我有一个 SHA1 哈希,它已被 UNHEX'ed 到 BINARY(20) 列中,我想创建一个 PARTITION BY HASH 表达式,该表达式采用 SHA1 值的前四个字节并将其转换或转换为数字值,正如 PARTITION BY HASH 表达式所期望的那样。)
它真的不需要是四个字节;只是一小部分可以被操作成整数值的字节。
我知道这已经晚了,但是,
尝试这个:
SELECT CONV(LEFT(HEX(<column_with_bin_str>),8), 16, 10) FROM Table;
这会将二进制字符串转换为十六进制,从转换后的字符串中获取前 8 个十六进制字符并将其转换为十进制。
我们取前 8 个十六进制字符,因为需要两个十六进制字符来表示一个字节。
您可以结合以下两个功能:
从字符串 str 返回一个子字符串 len 个字符长,从位置 pos 开始。
在不同的数字基数之间转换数字。返回数字 N 的字符串表示形式,从基础 from_base 转换为基础 to_base。
编辑
如果您需要获取其中的前 4 个数字,请10011001
使用1001 = 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