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个;你可以选择其他子集。
我想 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个;你可以选择其他子集。