Как сравнить (И) две строки, которые представляют двоичную маску в MySQL? - PullRequest
0 голосов
/ 02 августа 2010

У меня есть таблица в mysql, в которой (среди других столбцов) хранится битовая маска в виде строки, например:

000100

Я бы хотел выполнить запрос, который будет AND объединять эти поля, чтобы получить результат, который показывает, когда любые две позиции маски оба истинны.

В качестве примера рассмотрим три примера записей:

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

Этот запрос является самостоятельным. Я ищу записи, в которых для данного name одна и та же битовая маска встречается дважды или более.

В приведенном выше примере единственными записями, которые соответствуют этому условию, являются 11 и 12 (четвертый бит 1 в обоих случаях).

У меня проблема с выполнением AND на маске. Поскольку он хранится в виде строки, я не уверен, как заставить mysql рассматривать его как двоичное значение.

1 Ответ

3 голосов
/ 02 августа 2010

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...