我正在嘗試在MySQL中將字符串散列爲64位值(bigint)。我知道MD5()函數,它返回一個128位散列作爲二進制字符串。我很樂意獲取這個結果的最低或最高64位。但是,我無法弄清楚如何從二進制字符串類型轉換爲任何類型的數字類型。任何指針?在MySQL中將二進制字符串轉換爲bigint?
8
A
回答
14
使用CONV()
函數MD5哈希轉換從基地16到基地10 CAST
將其轉換爲一個數字:
select cast(conv(substring(md5(id), 1, 16), 16, 10) as unsigned integer) from SomeTable;
2
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
相關問題
- 1. 在Postgres中將十六進制字符串轉換爲bigint
- 2. 將字符串轉換爲二進制
- 3. 將字符串轉換爲二進制
- 4. 將二進制轉換爲字符串
- 5. 將字符串轉換爲二進制
- 6. 將二進制字符串轉換爲二進制文字
- 7. 將二進制字符串轉換爲二進制
- 8. Python將二進制字符串轉換爲二進制int
- 9. 將字符串轉換爲二進制,並在Python中將二進制轉換爲十進制?
- 10. 將字符串轉換爲二進制字符串
- 11. 將二進制字符串轉換爲文本字符串
- 12. PHP - 將字符串轉換爲bigint
- 13. 轉換字符串「s」爲二進制
- 14. 將字符串轉換二進制爲10進制
- 15. 將十六進制字符串轉換爲二進制
- 16. 將二進制長字符串轉換爲十六進制c#
- 17. 在Java中將二進制轉換爲其字符串值
- 18. 將二進制字符串轉換爲十六進制字符串C
- 19. 將十六進制字符串轉換爲二進制字符串 - Java
- 20. 將二進制字符串轉換爲十進制c字符串#
- 21. 將二進制字符串(SecureRandom.random_bytes)轉換爲十六進制字符串?
- 22. 將十六進制字符串轉換爲32位二進制字符串
- 23. 將十六進制字符串轉換爲二進制字符串
- 24. 將字節轉換爲c中的二進制字符串#
- 25. 將二進制字符串轉換爲字符
- 26. 將二進制字符串轉換爲二進制或十進制值
- 27. bigint轉換爲二進制(8)列的二進制表示
- 28. Go - 如何將二進制字符串轉換爲二進制字節?
- 29. 將十六進制字符串轉換爲mySQL中的數字
- 30. 將字符串轉換爲python中的二進制數
不錯,這就是我要找的。我認爲我不需要演員陣容,或者想投向bigint,但conv()函數實際上是我錯過的。 – 2009-08-11 11:26:03
最後一個注意事項。然後我在Java中訪問這個數字值。 Java整數類型被簽名,並且conv()的結果總是正數,這意味着它在某些情況下會溢出。對於那些將這作爲簽名長的人來說,你確實需要演員陣容,並且投射到「簽名」才能實現。 – 2009-08-25 09:51:09