微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决MariaDB 按位与十六进制字符串文字

我想 and 屏蔽 mariadb MD5 方法的结果,只返回 128 位值的前 32 位。

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

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

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

哪个返回

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

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

解决方法

或者有没有办法完全放弃整数转换,按位和 varchar 代替。

是的: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 个;你可以选择一些其他的子集。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。