У меня есть таблица в MySQL, которая хранит (среди других столбцов) битовая маска в виде строки, например:Как сравнить (AND) две строки, которые представляют собой двоичную маску в mysql?
000100
я хотел бы выполнить запрос, который будет AND
эти поля вместе, чтобы обеспечить результат, который показывает, когда любые две позиции маски составляют как true.
В качестве примера, рассмотрим эти три образца записи:
id name mask
== ==== ====
11 a 000100
12 a 000110
13 a 010000
Этот запрос автообъединение. Я ищу записи, где для заданного name
одна и та же битмаска выполняется дважды или более.
В приведенном выше примере единственными записями, которые соответствуют этому условию, являются 11
и 12
(четвертый бит равен 1
в обоих случаях).
Проблема, которую я испытываю, выполняет AND
на маске. Поскольку он хранится как строка, я не уверен, как заставить mysql рассматривать его как двоичное значение.
ли вы имеете в виду 'выберите Коэфф ('1100', 2, 10) && конв ('0110', 2, 10); '(двойной амперсанд вместо одиночного)? Однако даже с этой коррекцией он все еще не работает как 'select conv ('1001', 2, 10) && conv ('0110', 2, 10);' должен оцениваться как false, но он оценивается как true. – JYelton
Интересно, используя только один амперсанд, работает согласно вашему правлению. По-видимому, это побитовое 'AND', тогда как двойной амперсанд - логический' AND' - извините, я неправильно прочитал документацию по этому поводу! – JYelton
@ar: вы действительно копируете, удалили мой ответ. Просто добавление: при сравнении с фиксированным битом можно использовать нечто вроде 'b'0110'' вместо' conv ('0110', 2,10) ', но это будет работать только для литералов, а не для имен полей. – Wrikken