按位MySQL NAND查询

时间:2014-01-22 11:29:11

标签: mysql bit-manipulation

我有一个整数表,我想选择所有,如果转换为二进制,则不会同时设置第1位和第2位。

或者,对于另一个查询,它没有设置第3位和第4位。

例如,在列名为decvalue的表中,值为......

4 7 11 12 13 18 20 27

我会得到4,12和20作为第一次选择的结果 第二次选择我会得到18分。

我不知道从哪里开始,我试过......

foreach($db->query('SELECT   id, lineid, decvalue, dateupdated FROM      trialtable      WHERE decvalue 1!&2 ORDER BY id ASC') as $record)
{
id=$record['id'];
$dateupdated=$record['dateupdated'];
$decvalue=$record['decvalue']; 
echo $dateupdated." decvalue<br>";
}

谢谢和问候,

格雷厄姆

1 个答案:

答案 0 :(得分:0)

CREATE TABLE t
    (`id` int)
;

INSERT INTO t
    (`id`)
VALUES
    (4),
    (7),
    (11),
    (12),
    (13),
    (18),
    (20),
    (27)
;

select id, bin(id)
from t;

| ID | BIN(ID) |
|----|---------|
|  4 |     100 |
|  7 |     111 |
| 11 |    1011 |
| 12 |    1100 |
| 13 |    1101 |
| 18 |   10010 |
| 20 |   10100 |
| 27 |   11011 |

select 
id,
bin(id)
from t
where not(id & 1) = 1
and not(id & 2) = 2;


| ID | BIN(ID) |
|----|---------|
|  4 |     100 |
| 12 |    1100 |
| 20 |   10100 |

select 
id,
bin(id)
from t
where not(id & 4) = 4
and not(id & 8) = 8;


| ID | BIN(ID) |
|----|---------|
| 18 |   10010 |