我在mysql中有一个表,它将(作为其他列)的位掩码存储为字符串,例如:
000100
我想执行一个查询,将AND
这些字段放在一起,以提供显示任何两个掩码位置两者为真的结果。
举个例子,考虑这三个样本记录:
id name mask
== ==== ====
11 a 000100
12 a 000110
13 a 010000
此查询是自我加入。我正在寻找记录,对于给定的name
,相同的位掩码出现两次或更多次。
在上面的示例中,符合此条件的唯一记录是11
和12
(在这两种情况下,第四位都是1
。
我遇到的问题是在掩码上执行AND
。由于它存储为字符串,我不确定如何让mysql将其视为二进制值。
答案 0 :(得分:3)
您可以使用conv
,例如
select conv('1100', 2, 10) & conv('0110', 2, 10);
评论,它似乎对我有用:
mysql> select conv('1001', 2, 10) & conv('0110', 2, 10) = 0;
+-----------------------------------------------+
| conv('1001', 2, 10) & conv('0110', 2, 10) = 0 |
+-----------------------------------------------+
| 1 |
+-----------------------------------------------+
1 row in set (0.00 sec)
mysql> select conv('1001', 2, 10) & conv('0111', 2, 10) = 0;
+-----------------------------------------------+
| conv('1001', 2, 10) & conv('0111', 2, 10) = 0 |
+-----------------------------------------------+
| 0 |
+-----------------------------------------------+
1 row in set (0.00 sec)