跳到主要内容

BIT_OR

声明

BIT_OR(expr)

说明

返回 expr 中所有位的按位或。

结果类型取决于函数参数值被评估为二进制字符串还是数字。当参数值具有二进制字符串类型,并且参数不是十六进制字面量、Bit 字面量或 NULL 字面量时,就会发生二进制字符串求值。否则会发生数值计算,必要时将参数值转换为无符号 64 位整数。

如果没有匹配的行,BIT_OR() 返回一个与参数值长度相同的中性值(所有位都设置为 0)。除非所有值都为 NULL,否则 NULL 值不会影响结果。在这种情况下,结果是一个与参数值具有相同长度的中性值。

示例

CREATE TABLE tbl1 (year YEAR (4), month INT(2)UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL);
Query OK, 0 rows affected (0.063 sec)

INSERT INTO tbl1 VALUES(2021,1,1),(2021,1,22),(2021,1,3),(2021,2,2), (2021,2,23),(2021,2,23);
Query OK, 6 rows affected (0.003 sec)
Records: 6 Duplicates: 0 Warnings: 0

SELECT * FROM tbl1;
+------+-------+------+
| year | month | day |
+------+-------+------+
| 2021 | 01 | 01 |
| 2021 | 01 | 22 |
| 2021 | 01 | 03 |
| 2021 | 02 | 02 |
| 2021 | 02 | 23 |
| 2021 | 02 | 23 |
+------+-------+------+
6 rows in set (0.002 sec)

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM tbl1 GROUP BY year,month;
+------+-------+------+
| year | month | days |
+------+-------+------+
| 2021 | 01 | 3 |
| 2021 | 02 | 2 |
+------+-------+------+
2 rows in set (0.001 sec)