宣言
BIT_OR(expr) OVER (analytic_clause)
説明
expr のすべてのビットに対するビットORを返します。
結果の型は、関数の引数値がバイナリ文字列として評価されるか、数値として評価されるかによって決まります。引数値がバイナリ文字列型であり、かつ16進数リテラル、Bitリテラル、または NULL リテラルではない場合、バイナリ文字列の評価が行われます。それ以外の場合は数値計算が行われ、必要に応じて引数値は符号なし64ビット整数に変換されます。
マッチする行がない場合、BIT_OR() は引数値の長さと同じ長さの中性値(すべてのビットが0に設定されている)を返します。すべての値が NULL でない限り、NULL 値は結果に影響しません。その場合、結果は引数値と同じ長さの中性値となります。
例
CREATE TABLE tbl1 (year YEAR (4), month INT(2)UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL);
INSERT INTO tbl1 VALUES(2021,1,1),(2021,1,22),(2021,1,3),(2021,2,2), (2021,2,23),(2021,2,23);
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_OR(day) OVER (PARTITION BY year, month) AS days FROM tbl1;
+------+-------+------+
| year | month | days |
+------+-------+------+
| 2021 | 01 | 23 |
| 2021 | 01 | 23 |
| 2021 | 01 | 23 |
| 2021 | 02 | 23 |
| 2021 | 02 | 23 |
| 2021 | 02 | 23 |
+------+-------+------+
6 rows in set