MySQL에서 이진 문자열을 bigint로 변환 하시겠습니까?
문제
MySQL에서 64 비트 값 (bigint)으로 문자열을 해시하려고합니다. 128 비트 해시를 이진 문자열로 반환하는 MD5 () 함수를 알고 있습니다. 나는이 결과의 바닥 또는 상위 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
제휴하지 않습니다 StackOverflow