MariaDB 按位与十六进制字符串文字

MariaDB Bitwise AND Of Hex String Literal

我想 and 将 mariadb MD5 方法的结果屏蔽为 return 我只需要 128 位值的前 32 位。

我的问题是 MD5 函数的结果是一个 varchar,我不能 and 它,除非它是一个整数。

我曾尝试使用 CONV 函数,但 return 仅作为 64 位数字,因此我的所有结果都是 INT_MAX,该查询的一个示例是。

SELECT MD5(A.Country), CONV(MD5(A.Country),16,10), A.Country
 FROM Analytics A

哪个returns

+--------------------------------+--------------------------+-------+
|MD5(A.Country)                  |CONV(MD5(A.Country),16,10)|Country|
+--------------------------------+--------------------------+-------+
|8f14e45fceea167a5a36dedd4bea2543|18446744073709551615      |7      |
|c81e728d9d4c2f636f067f89cc14862c|18446744073709551615      |2      |
|c81e728d9d4c2f636f067f89cc14862c|18446744073709551615      |2      |
|c81e728d9d4c2f636f067f89cc14862c|18446744073709551615      |2      |
|c81e728d9d4c2f636f067f89cc14862c|18446744073709551615      |2      |
+--------------------------------+--------------------------+-------+

将这个 varchar 转换为整数的正确方法是什么,这样我就可以按位转换它,或者有没有办法完全放弃整数转换,按位转换成 varchar。

or is there a way to forego the integer conversion entirely and bitwise and the varchar instead.

是的:32 位是 8 个十六进制字符,所以你可以这样做

select left(md5(a.country), 8)
from analytics a
select CONV(LEFT(MD5(2233), 8), 16,10);

会给你,有效,INT UNSIGNED

MD5() 给你 32 个十六进制数字。
LEFT(..., 8)给你前8个;你可以选择其他子集。