BITOR

BITOR

두 숫자 또는 바이너리 표현식의 비트별 OR(bitwise OR)을 돌려주는 비트 연산 함수예요. 길이가 다른 두 BINARY 값을 다룰 때는 어느 쪽에 패딩할지 padside 인자로 지정해요.

출처: 공식 문서

본문

두 숫자 또는 바이너리 표현식의 비트별 OR을 반환합니다.

별칭 (Aliases): BIT_OR

참고 (See also): BITOR_AGG

구문 (Syntax)

BITOR( <expr1> , <expr2> [ , '<padside>' ] )

인자 (Arguments)

expr1

이 표현식은 INTEGER 값, BINARY 값, 또는 INTEGER 값으로 캐스팅할 수 있는 데이터 타입의 값으로 평가되어야 합니다.

expr2

이 표현식은 INTEGER 값, BINARY 값, 또는 INTEGER 값으로 캐스팅할 수 있는 데이터 타입의 값으로 평가되어야 합니다.

'padside'

두 BINARY 인자 값의 길이가 같지 않을 때, 더 짧은 길이의 값을 어느 쪽에 패딩할지 지정합니다. 다음의 대소문자 구분 없는 값 중 하나를 지정하세요:

  • LEFT — 값을 왼쪽에 패딩.
  • RIGHT — 값을 오른쪽에 패딩.

더 짧은 값이 더 큰 값의 길이와 같아지도록 0으로 패딩됩니다. 이 인자는 BINARY 표현식을 지정할 때만 유효합니다. 두 BINARY 값의 길이가 다르면 이 인자가 필요합니다.

반환값 (Returns)

INTEGER 값, BINARY 값 또는 NULL을 반환합니다:

  • 입력 표현식이 INTEGER 값을 포함하면, 입력 표현식의 비트별 OR을 나타내는 INTEGER 값을 반환합니다.
  • 입력 표현식이 BINARY 값을 포함하면, 입력 표현식의 비트별 OR을 나타내는 BINARY 값을 반환합니다.
  • 입력 값 중 하나라도 NULL이면 NULL을 반환합니다.

사용 참고 (Usage notes)

  • 두 입력 표현식은 INTEGER 또는 BINARY 중 같은 데이터 타입의 값으로 평가되어야 합니다.
  • 어느 인자의 데이터 타입이든 숫자형(numeric)이지만 INTEGER가 아닌 경우(예: FLOAT, DECIMAL 등), 그 인자는 INTEGER 값으로 캐스팅됩니다.
  • 어느 인자의 데이터 타입이든 문자열(예: VARCHAR)이면, 가능하면 그 인자가 INTEGER 값으로 캐스팅됩니다. 예를 들어 문자열 12.3은 12로 캐스팅됩니다. 값을 INTEGER 값으로 캐스팅할 수 없으면 그 값은 NULL로 취급됩니다.
  • 이 함수는 인자를 BINARY 값으로 암시적으로 캐스팅하지 않습니다.

예제 (Examples)

INTEGER 인자 값과 BINARY 인자 값에 대한 예제가 아래 섹션에 나와 있습니다.

INTEGER 인자 값과 함께 BITAND, BITOR, BITXOR 사용하기

간단한 테이블을 만들고 데이터를 삽입합니다:

CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
INSERT INTO bits (ID, bit1, bit2) VALUES
  (   11,    1,     1),    -- Bits are all the same.
  (   24,    2,     4),    -- Bits are all different.
  (   42,    4,     2),    -- Bits are all different.
  ( 1624,   16,    24),    -- Bits overlap.
  (65504,    0, 65504),    -- Lots of bits (all but the low 6 bits).
  (    0, NULL,  NULL)     -- No bits.
  ;

쿼리를 실행합니다:

SELECT bit1,
       bit2,
       BITAND(bit1, bit2),
       BITOR(bit1, bit2),
       BITXOR(bit1, BIT2)
  FROM bits
  ORDER BY bit1;
+------+-------+--------------------+-------------------+--------------------+
| BIT1 |  BIT2 | BITAND(BIT1, BIT2) | BITOR(BIT1, BIT2) | BITXOR(BIT1, BIT2) |
|------+-------+--------------------+-------------------+--------------------|
|    0 | 65504 |                  0 |             65504 |              65504 |
|    1 |     1 |                  1 |                 1 |                  0 |
|    2 |     4 |                  0 |                 6 |                  6 |
|    4 |     2 |                  0 |                 6 |                  6 |
|   16 |    24 |                 16 |                24 |                  8 |
| NULL |  NULL |               NULL |              NULL |               NULL |
+------+-------+--------------------+-------------------+--------------------+

BINARY 인자 값과 함께 BITAND, BITOR, BITXOR 사용하기

간단한 테이블을 만들고 데이터를 삽입합니다:

CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 BINARY(2), bit2 BINARY(2), bit3 BINARY(4));

INSERT INTO bits VALUES
  (1, x'1010', x'0101', x'11001010'),
  (2, x'1100', x'0011', x'01011010'),
  (3, x'BCBC', x'EEFF', x'ABCDABCD'),
  (4, NULL, NULL, NULL);

참고

BINARY 값은 x'value' 표기법으로 삽입되는데, 여기서 value는 16진수 숫자를 담습니다. 자세한 내용은 Binary input and output을 참고하세요.

같은 길이의 BINARY 컬럼에 쿼리를 실행합니다:

SELECT bit1,
       bit2,
       BITAND(bit1, bit2),
       BITOR(bit1, bit2),
       BITXOR(bit1, bit2)
  FROM bits;
+------+------+--------------------+-------------------+--------------------+
| BIT1 | BIT2 | BITAND(BIT1, BIT2) | BITOR(BIT1, BIT2) | BITXOR(BIT1, BIT2) |
|------+------+--------------------+-------------------+--------------------|
| 1010 | 0101 | 0000               | 1111              | 1111               |
| 1100 | 0011 | 0000               | 1111              | 1111               |
| BCBC | EEFF | ACBC               | FEFF              | 5243               |
| NULL | NULL | NULL               | NULL              | NULL               |
+------+------+--------------------+-------------------+--------------------+

'padside' 인자를 지정하지 않고 다른 길이의 BINARY 컬럼에 쿼리를 실행하면 오류가 반환됩니다:

SELECT bit1,
       bit3,
       BITAND(bit1, bit3),
       BITOR(bit1, bit3),
       BITXOR(bit1, bit3)
  FROM bits;
100544 (22026): The lengths of two variable-sized fields do not match: first length 2, second length 4

다른 길이의 BINARY 컬럼에 쿼리를 실행하고, 더 작은 인자 값을 왼쪽에 패딩합니다:

SELECT bit1,
       bit3,
       BITAND(bit1, bit3, 'LEFT'),
       BITOR(bit1, bit3, 'LEFT'),
       BITXOR(bit1, bit3, 'LEFT')
  FROM bits;
+------+----------+----------------------------+---------------------------+----------------------------+
| BIT1 | BIT3     | BITAND(BIT1, BIT3, 'LEFT') | BITOR(BIT1, BIT3, 'LEFT') | BITXOR(BIT1, BIT3, 'LEFT') |
|------+----------+----------------------------+---------------------------+----------------------------|
| 1010 | 11001010 | 00001010                   | 11001010                  | 11000000                   |
| 1100 | 01011010 | 00001000                   | 01011110                  | 01010110                   |
| BCBC | ABCDABCD | 0000A88C                   | ABCDBFFD                  | ABCD1771                   |
| NULL | NULL     | NULL                       | NULL                      | NULL                       |
+------+----------+----------------------------+---------------------------+----------------------------+

다른 길이의 BINARY 컬럼에 쿼리를 실행하고, 더 작은 인자 값을 오른쪽에 패딩합니다:

SELECT bit1,
       bit3,
       BITAND(bit1, bit3, 'RIGHT'),
       BITOR(bit1, bit3, 'RIGHT'),
       BITXOR(bit1, bit3, 'RIGHT')
  FROM bits;
+------+----------+-----------------------------+----------------------------+-----------------------------+
| BIT1 | BIT3     | BITAND(BIT1, BIT3, 'RIGHT') | BITOR(BIT1, BIT3, 'RIGHT') | BITXOR(BIT1, BIT3, 'RIGHT') |
|------+----------+-----------------------------+----------------------------+-----------------------------|
| 1010 | 11001010 | 10000000                    | 11101010                   | 01101010                    |
| 1100 | 01011010 | 01000000                    | 11011010                   | 10011010                    |
| BCBC | ABCDABCD | A88C0000                    | BFFDABCD                   | 1771ABCD                    |
| NULL | NULL     | NULL                        | NULL                       | NULL                        |
+------+----------+-----------------------------+----------------------------+-----------------------------+

더 알아보기 (Learn more)