تحويل السلسلة الثنائية إلى bigint في mysql؟
سؤال
أحاول تجزئة سلسلة إلى قيمة 64 بت (bigint) في mysql. أنا على علم بوظيفة MD5 ()، والتي ترجع التجزئة 128 بت كسلسلة ثنائية. سأكون سعيدا فقط لأخذ القاع أو أعلى 64 بت من هذه النتيجة. ومع ذلك، لا يمكنني معرفة كيفية الحصول على نوع سلسلة ثنائية إلى نوع رقمي من أي فرز. أي مؤشرات؟
المحلول
استخدم ال CONV()
وظيفة لتحويل MD5 التجزئة من قاعدة 16 إلى قاعدة 10 و CAST
لتحويله إلى رقم:
select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
نصائح أخرى
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
يمكنك أيضا استخدام CRC32
الوظيفة التي ترجع قيمة غير موقعة 32 بت.
SELECT CRC32(id) from SomeTable;
لا تنتمي إلى StackOverflow