Konvertieren Binärkette in MySQL bigint?
Frage
Ich bin versucht, einen String in einen 64-Bit-Wert (bigint) in MySQL Hash. Ich bin mir der MD5 () -Funktion, die einen 128-Bit-Hash als binäre Zeichenkette zurückgibt. Ich würde gerne nur den Boden nehmen oder Top-64 Bits dieses Ergebnis. Aber ich kann nicht herausfinden, wie aus einem binären String-Typ in einen numerischen Typ jeglicher Art zu erhalten. Alle Zeiger?
Lösung
Mit der Funktion CONV()
den MD5-Hash von der Basis 16 konvertieren 10 und CAST
stützen sie in eine Zahl konvertieren:
select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
Andere Tipps
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
Sie können auch CRC32
Funktion verwenden, die 32-Bit-Wert ohne Vorzeichen zurück.
SELECT CRC32(id) from SomeTable;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow