宣言
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