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?

Foi útil?

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 

Fonte

Você também pode usar a função CRC32 que os retornos 32-bit sem assinatura valor.

SELECT CRC32(id) from SomeTable;

Documentação

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top