Converter string binária para bigint no MySQL?
Pergunta
Eu estou tentando botar uma string para um valor de 64 bits (bigint) em MySQL. Estou ciente da função MD5 (), que retorna um hash de 128 bits como uma string binária. Eu ficaria feliz em apenas tomar parte inferior ou superior 64 bits de este resultado. No entanto, eu não consigo descobrir como ir de um tipo de cadeia binária para um tipo numérico de qualquer espécie. Os ponteiros?
Solução
Uso da função CONV()
para converter o hash MD5 a partir da base 16 a base 10 e CAST
para convertê-lo a um número:
select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
Outras dicas
CREATE FUNCTION dbo.HexStrToVarBinary(@hexstr varchar(8000))
RETURNS varbinary(8000)
AS
BEGIN
DECLARE @hex char(1), @i int, @place bigint, @a bigint
SET @i = LEN(@hexstr)
set @place = convert(bigint,1)
SET @a = convert(bigint, 0)
WHILE (@i > 0 AND (substring(@hexstr, @i, 1) like '[0-9A-Fa-f]'))
BEGIN
SET @hex = SUBSTRING(@hexstr, @i, 1)
SET @a = @a +
convert(bigint, CASE WHEN @hex LIKE '[0-9]'
THEN CAST(@hex as int)
ELSE CAST(ASCII(UPPER(@hex))-55 as int) end * @place)
set @place = @place * convert(bigint,16)
SET @i = @i - 1
END
RETURN convert(varbinary(8000),@a)
END
GO
Você também pode usar a função CRC32
que os retornos 32-bit sem assinatura valor.
SELECT CRC32(id) from SomeTable;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow