如何在mysql中比较(AND)两个表示二进制掩码的字符串?

时间:2010-08-02 16:56:41

标签: mysql bitmask

我在mysql中有一个表,它将(作为其他列)的位掩码存储为字符串,例如:

000100

我想执行一个查询,将AND这些字段放在一起,以提供显示任何两个掩码位置两者为真的结果。

举个例子,考虑这三个样本记录:

id  name  mask
==  ====  ====
11  a     000100
12  a     000110
13  a     010000

此查询是自我加入。我正在寻找记录,对于给定的name,相同的位掩码出现两次或更多次。

在上面的示例中,符合此条件的唯一记录是1112(在这两种情况下,第四位都是1

我遇到的问题是在掩码上执行AND。由于它存储为字符串,我不确定如何让mysql将其视为二进制值。

1 个答案:

答案 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)