0

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

000100

我想执行一个查询,将AND这些字段一起提供一个结果,显示任何两个掩码位置何时都真。

例如,考虑以下三个示例记录:

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

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

在上面的例子中,唯一符合这个条件的记录是11and 12(第四位1在这两种情况下都是)。

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

4

1 回答 1

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)
于 2010-08-02T17:04:22.107 回答