如何解决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 举报,一经查实,本站将立刻删除。