宣言
BIT_OR(expr)
説明
expr のすべてのビットに対するビット単位のORを返します。
結果の型は、関数の引数値がバイナリ文字列として評価されるか数値として評価されるかによって決まります。引数値がバイナリ文字列タイプであり、かつ引数が16進数リテラル、ビットリテラル、または NULL リテラルではない場合、バイナリ文字列の評価が行われます。それ以外の場合は数値計算が行われ、必要に応じて引数値は符号なし64ビット整数に変換されます。
一致する行がない場合、BIT_OR()は引数値の長さと同じ長さのニュートラル値(すべてのビットが0に設定されている)を返します。すべての値が NULL である場合を除き、NULL 値は結果に影響しません。その場合、結果は引数値と同じ長さのニュートラル値です。
例
obclient> CREATE TABLE tbl1 (year YEAR (4), month INT(2)UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL);
Query OK, 0 rows affected
obclient> 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
Records: 6 Duplicates: 0 Warnings: 0
obclient> 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
obclient> 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