BIT_OR()  比特或操作; 
00001111 | 00001101 = 00001111 BIT_OR(2<<2)
2<<2 = 00001000
BIT_OR(00001000) 
然而函数只允许一个参数   那问题就产生了   函数是怎么操作的?00001000和哪个数'|'呢
 

解决方案 »

  1.   

    BIT_OR(expr)是指将返回结果集中的所有行的expr列进行bit or操作
    如select bit_or(a) from(select 15 a union select 13 a) t,15 or 13结果是15
      

  2.   

    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 |
    +------+-------+------+
    我也是个初学者,还是没有明白,楼上能解释一下我的这个例子结果是怎么得出的吗?
    先谢了!:)
      

  3.   

    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 |
    +------+-------+------+
    我也是个初学者,还是没有明白,楼上能解释一下我的这个例子结果是怎么得出的吗?
    先谢了!:)
      

  4.   

    我的理解是这样的,不知道对不对,欢迎指教!因为2000年1月有3个日期1、20、30,且MySQL 使用 BIGINT (64 位) 算法进行位运算。
    这样‘1左移1位’与‘1左移20位’与‘1左移30位’,结果里含有3个比特位,所以返回的是3.