Mysql选择特定位设置为整数的行

时间:2014-11-06 08:41:49

标签: mysql bit-manipulation bit bitwise-operators

我需要一个可以设置多个值的字段。我不想继续使用mysql集。我可以做的另一种方式是说我有多个类别。

猫1,猫2,猫3 ......等。限于约20个类别。假设它们为1(00001),2(00010),4(00100)......等等。

如果我的帖子在'cat 1'中,我会在帖子表字段中添加值1(00001),即TINYINT。 如果我在'cat 1'和'cat 2'中发帖,我会在TINYINT字段中添加值3(00011)。

现在我想得到'cat 1'中我想查询的所有帖子,如field ='**** 1',即只是检查最后一位是否开启。

又一个例子。说我的帖子在'cat 2'和'cat 3',我会添加值6(00111)。现在我想得到'cat 2'中的所有帖子。我想查询where ='*** 1 *'。

如上所述,我想知道如何根据哪个位查询整数字段?

2 个答案:

答案 0 :(得分:2)

多年来没有使用位串(用于在大型机时代内存储大量信息)。

但是你应该可以使用位算术。例如,检查第二位是否打开: -

SELECT *
FROM sometable
WHERE bit_field & 2 = 2

或者检查第2位是否打开且第1位是否关闭: -

SELECT *
FROM sometable
WHERE bit_field & 3 = 2

这里的细节很少: -

http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html

答案 1 :(得分:0)

SELECT CONV(15,10,2);  

SET @SAYI = 86;
SELECT
    @SAYI SAYI,
    CONCAT(
        TRUNCATE(@SAYI/64,0), 
        TRUNCATE(MOD(@SAYI,64)/32,0),
        TRUNCATE(MOD(MOD(@SAYI,64),32)/16,0), 
        TRUNCATE(MOD(MOD(MOD(@SAYI,64),32),16)/8,0),
        TRUNCATE(MOD(MOD(MOD(MOD(@SAYI,64),32),16),8)/4,0),
        TRUNCATE(MOD(MOD(MOD(MOD(MOD(@SAYI,64),32),16),8),4)/2,0),
        TRUNCATE(MOD(MOD(MOD(MOD(MOD(MOD(@SAYI,64),32),16),8),4),2)/1,0)
    ) AS BINARY_;