문제

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 

원천

당신은 또한 사용할 수 있습니다 CRC32 32 비트 부호없는 값을 반환하는 함수.

SELECT CRC32(id) from SomeTable;

선적 서류 비치

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top