Mysql关于bit类型的用法
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)