免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5593 | 回复: 3
打印 上一主题 下一主题

BIT_OR()是用来干什么的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-19 20:41 |只看该作者 |倒序浏览
查询实例里面有如下查询
SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
       GROUP BY year,month;

文档对BIT_OR的解释如下
BIT_OR(expr)
Returns the bitwise OR of all bits in expr. The calculation is performed with 64-bit (BIGINT) precision.
This function returns 0 if there were no matching rows.
是expr里面所有的位做或运算么?那结果是不是只有一位?

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
2 [报告]
发表于 2009-07-20 09:15 |只看该作者
下面的例子显示了如何使用位组函数来计算每个月中用户访问网页的天数。

CREATE   TABLE  t1 ( year   YEAR ( 4 ),  month   INT ( 2 ) UNSIGNED ZEROFILL,

              day   INT ( 2 ) UNSIGNED ZEROFILL);

INSERT   INTO  t1  VALUES ( 2000 , 1 , 1 ),( 2000 , 1 , 20 ),( 2000 , 1 , 30 ),( 2000 , 2 , 2 ),

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

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

SELECT   year , month ,BIT_COUNT(BIT_OR( 1 << day ))  AS  days  FROM  t1

        GROUP   BY   year , month ;

将返回:

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

|   year   |   month   |  days  |

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

|   2000   |      01   |      3   |

|   2000   |      02   |      2   |

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

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

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month;




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

“用法比较有技巧。

1、BIT_COUNT( expr ):返回 expr 的二进制表达式中”1“的个数。
        例如:29 = 11101 则:BIT_COUNT(29)= 4;
2、BIT_OR( expr ):返回 expr 中所有比特的bitwise OR。计算执行的精确度为64比特(BIGINT) 。

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

论坛徽章:
0
3 [报告]
发表于 2009-07-21 08:02 |只看该作者
明白了,原来是不同的行之间bit_or

论坛徽章:
0
4 [报告]
发表于 2009-07-21 08:56 |只看该作者
位或操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP