Convertir una cadena binaria a bigint en MySQL?
Pregunta
Estoy tratando de hash de una cadena a un valor de 64 bits (BIGINT) en MySQL. Soy consciente de la función MD5 (), que devuelve un hash de 128 bits como una cadena binaria. Estaría feliz de tomar sólo la parte inferior o superior de 64 bits de este resultado. Sin embargo, no puedo encontrar la manera de llegar de un tipo de cadena binaria a un tipo numérico de cualquier tipo. Cualquier punteros?
Solución
Utilice la función CONV()
para convertir el hash MD5 de la base 16 a la base 10 y CAST
para convertirlo en un número:
select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
Otros consejos
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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow