Mysql关于bit类型的用法

足球带我奔跑 2012-06-19

Mysql关于bit类型的用法:

官方的资料如下:

9.1.5.位字段值

可以使用b'value'符号写位字段值。value是一个用0和1写成的二进制值。

位字段符号可以方便指定分配给BIT列的值:

mysql>CREATETABLEt(bBIT(8));

mysql>INSERTINTOtSETb=b'11111111';

mysql>INSERTINTOtSETb=b'1010';

+------+----------+----------+----------+

|b+0|BIN(b+0)|OCT(b+0)|HEX(b+0)|

+------+----------+----------+----------+

|255|11111111|377|FF||10|1010|12|A|

+------+----------+----------+----------+

Mysql:bit类型的查询与插入

Posted10月11,2010bylogineraninMYSQL.Tagged:MYSQL.

mysql有种字段类型是bit。

1.如何插入呢?

它的插入必须采用:

可以使用b’value’符号写位字段值。value是一个用0和1写成的二进制值。

mysql>createtablean_bit(idbit(8));

QueryOK,0rowsaffected(0.00sec)

mysql>insertintoan_bitvalues(11);

QueryOK,1rowaffected(0.00sec)

虽然可以插入,但是实际插入的数值是11(十进制),不是3(十进制)。

mysql>insertintoan_bitvalues(b’11′);

QueryOK,1rowaffected(0.00sec)

这才是正确的插入方法。插入的值是3(十进制)

2.如何查询呢?

mysql>select*froman_bit;

+——+

|id|

+——+

|

|

||

+——+

2rowsinset(0.00sec)

这样是不对的,看不到东西

mysql>selectid+0froman_bit;

+——+

|id+0|

+——+

|11|

|3|

+——+

2rowsinset(0.00sec)

这是正确的,可以看到十进制的值。

mysql>selectbin(id+0)froman_bit;

+———–+

|bin(id+0)|

+———–+

|1011|

|11|

+———–+

2rowsinset(0.00sec)

这是二进制的值

mysql>selectoct(id+0)froman_bit;

+———–+

|oct(id+0)|

+———–+

|13|

|3|

+———–+

2rowsinset(0.00sec)

这是八进制的值

mysql>selecthex(id+0)froman_bit;

+———–+

|hex(id+0)|

+———–+

|B|

|3|

+———–+

2rowsinset(0.00sec)

这是十六进制的值

------------------------------------------------

mysql>selectuid,bin(login_days_3g),bin(login_days_wap),bin(login_days_client)frommonth_visit_user_3g_201205limit10;

+-----------+---------------------------------+---------------------------------+---------------------------------+

|uid|bin(login_days_3g)|bin(login_days_wap)|bin(login_days_client)|

+-----------+---------------------------------+---------------------------------+---------------------------------+

|222451743|1111111111111111111111111111111|1001010000000000000000000000000|1111111111111111111111111111111|

|232336555|1011010101111101000001011111101|1001000000000000000000000000000|1011010101111101000001011111101|

|263922954|1101111111111111111111111110111|1101111111111111111111100000000|100000000000000000000011110111|

|340421490|111111011101001111010111101|0|111111011101001111010111101|

|391362651|1111111111111111111111111111111|1111111111111111111111111111111|1000100100000000000000001111|

|243815473|101100000000100101110100010001|0|101100000000100101110100010001|

|265655422|1111111111111111111111111111111|1111111111111111111111111111111|1111111111111111111011111111111|

|280646224|10000001111111111|1111111111|10000001000000001|

|280831000|1001001000100011111111111111|0|1001001000100011111111111111|

|4859|1111101011111111111111111111011|0|1111101011111111111111111111011|

+-----------+---------------------------------+---------------------------------+---------------------------------+

10rowsinset(0.00sec)

mysql>selectuid,bin(login_days_3g),bin(login_days_wap),bin(login_days_client)frommonth_visit_user_3g_201205limit20;

+-----------+---------------------------------+---------------------------------+---------------------------------+

|uid|bin(login_days_3g)|bin(login_days_wap)|bin(login_days_client)|

+-----------+---------------------------------+---------------------------------+---------------------------------+

|222451743|1111111111111111111111111111111|1001010000000000000000000000000|1111111111111111111111111111111|

|232336555|1011010101111101000001011111101|1001000000000000000000000000000|1011010101111101000001011111101|

|263922954|1101111111111111111111111110111|1101111111111111111111100000000|100000000000000000000011110111|

|340421490|111111011101001111010111101|0|111111011101001111010111101|

|391362651|1111111111111111111111111111111|1111111111111111111111111111111|1000100100000000000000001111|

|243815473|101100000000100101110100010001|0|101100000000100101110100010001|

|265655422|1111111111111111111111111111111|1111111111111111111111111111111|1111111111111111111011111111111|

|280646224|10000001111111111|1111111111|10000001000000001|

|280831000|1001001000100011111111111111|0|1001001000100011111111111111|

|4859|1111101011111111111111111111011|0|1111101011111111111111111111011|

|18991|1001100111111011001|0|1001100111111011001|

|19770|10111111|10000000|111111|

|32885|1100000000010001111111|1000000000010000000000|1100000000000001111111|

|39801|1000000011100000001111001011|0|1000000011100000001111001011|

|41437|1111111111111111111111111111111|10000000000000000100000000000|1111111111111111111111111111111|

|41542|111111|0|111111|

|45626|1111111111111111111111111111111|0|1111111111111111111111111111111|

|55339|1111111111111110111111111111111|0|1111111111111110111111111111111|

|59130|11111111111111111111111|0|11111111111111111111111|

|61131|1111111|0|1111111|

+-----------+---------------------------------+---------------------------------+---------------------------------+

20rowsinset(0.12sec)

mysql>selectuid,bin(login_days_3g+0),bin(login_days_wap+0),bin(login_days_client+0)frommonth_visit_user_3g_201205limit20;

+-----------+---------------------------------+---------------------------------+---------------------------------+

|uid|bin(login_days_3g+0)|bin(login_days_wap+0)|bin(login_days_client+0)|

+-----------+---------------------------------+---------------------------------+---------------------------------+

|222451743|1111111111111111111111111111111|1001010000000000000000000000000|1111111111111111111111111111111|

|232336555|1011010101111101000001011111101|1001000000000000000000000000000|1011010101111101000001011111101|

|263922954|1101111111111111111111111110111|1101111111111111111111100000000|100000000000000000000011110111|

|340421490|111111011101001111010111101|0|111111011101001111010111101|

|391362651|1111111111111111111111111111111|1111111111111111111111111111111|1000100100000000000000001111|

|243815473|101100000000100101110100010001|0|101100000000100101110100010001|

|265655422|1111111111111111111111111111111|1111111111111111111111111111111|1111111111111111111011111111111|

|280646224|10000001111111111|1111111111|10000001000000001|

|280831000|1001001000100011111111111111|0|1001001000100011111111111111|

|4859|1111101011111111111111111111011|0|1111101011111111111111111111011|

|18991|1001100111111011001|0|1001100111111011001|

|19770|10111111|10000000|111111|

|32885|1100000000010001111111|1000000000010000000000|1100000000000001111111|

|39801|1000000011100000001111001011|0|1000000011100000001111001011|

|41437|1111111111111111111111111111111|10000000000000000100000000000|1111111111111111111111111111111|

|41542|111111|0|111111|

|45626|1111111111111111111111111111111|0|1111111111111111111111111111111|

|55339|1111111111111110111111111111111|0|1111111111111110111111111111111|

|59130|11111111111111111111111|0|11111111111111111111111|

|61131|1111111|0|1111111|

+-----------+---------------------------------+---------------------------------+---------------------------------+

20rowsinset(0.12sec)

----------------------------

3.6.8.根据天计算访问量

下面的例子显示了如何使用位组函数来计算每个月中用户访问网页的天数。

CREATETABLEt1(yearYEAR(4),monthINT(2)UNSIGNEDZEROFILL,

dayINT(2)UNSIGNEDZEROFILL);

INSERTINTOt1VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),

(2000,2,23),(2000,2,23);

示例表中含有代表用户访问网页的年-月-日值。可以使用以下查询来确定每个月的访问天数:

SELECTyear,month,BIT_COUNT(BIT_OR(1<<day))ASdaysFROMt1

GROUPBYyear,month;

将返回:

+------+-------+------+

|year|month|days|

+------+-------+------+

|2000|01|3|

|2000|02|2|

+------+-------+------+

该查询计算了在表中按年/月组合的不同天数,可以自动去除重复的询问。

上面例子中的查询语句:

SELECTyear,month,BIT_COUNT(BIT_OR(1<<day))ASdaysFROMt1GROUPBYyear,month;

中的”BIT_COUNT(BIT_OR(1<<day))

“用法比较有技巧。

1、BIT_COUNT(expr):返回expr的二进制表达式中”1“的个数。

例如:29=11101则:BIT_COUNT(29)=4;

2、BIT_OR(expr):返回expr中所有比特的bitwiseOR。计算执行的精确度为64比特(BIGINT)。

例如:上面例子中,2000年02月中有一条2号的记录两条23号的记录,所以"1<<day"表示出来就是“1<<2”和“1<<23”,得到二进制数100和100000000000000000000000。然后再OR运算。即100OR10000000000000000000000OR10000000000000000000000=100000000000000000000100;这样再用BIT_COUNT处理得出的值就是2,自动去除了重复的日期。

---------------------------------------------

5月27--5月31

mysql>selectcount(uid)frommonth_visit_user_3g_201205where(login_days_3g&(b'11111'<<26))!=0limit10;

+------------+

|count(uid)|

+------------+

|10610606|

+------------+

1rowinset(9.19sec)

6月1日-6月2日

mysql>selectcount(uid)frommonth_visit_user_3g_201206where(login_days_3g&(b'11'<<0))!=0limit10;

+------------+

|count(uid)|

+------------+

|9299252|

+------------+

1rowinset(3.14sec)

相关推荐