在MySQL中将二进制字符串转换为bigint?
问题描述:
我正在尝试在MySQL中将字符串散列为64位值(bigint)。我知道MD5()函数,它返回一个128位散列作为二进制字符串。我很乐意获取这个结果的最低或最高64位。但是,我无法弄清楚如何从二进制字符串类型转换为任何类型的数字类型。任何指针?在MySQL中将二进制字符串转换为bigint?
答
使用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
+0
不错!希望有内置的东西。 – 2009-08-11 11:24:04
+0
现在反过来请:D:@ :) – 2014-01-28 06:19:55
不错,这就是我要找的。我认为我不需要演员阵容,或者想投向bigint,但conv()函数实际上是我错过的。 – 2009-08-11 11:26:03
最后一个注意事项。然后我在Java中访问这个数字值。 Java整数类型被签名,并且conv()的结果总是正数,这意味着它在某些情况下会溢出。对于那些将这作为签名长的人来说,你确实需要演员阵容,并且投射到“签名”才能实现。 – 2009-08-25 09:51:09