카테고리:

비트 식 함수

BITAND

두 숫자 식 또는 이진 식의 비트 AND를 반환합니다.

별칭:

BIT_AND

참고 항목:

BITAND_AGG

구문

BITAND( <expr1> , <expr2> [ , '<padside>' ] )
Copy

인자

expr1

이 식은 INTEGER 값, BINARY 값 또는 INTEGER 값으로 캐스팅될 수 있는 데이터 타입의 값으로 계산되어야 합니다.

expr2

이 식은 INTEGER 값, BINARY 값 또는 INTEGER 값으로 캐스팅될 수 있는 데이터 타입의 값으로 계산되어야 합니다.

'padside'

두 BINARY 인자 값의 길이가 같지 않은 경우 어느 쪽에서 길이가 더 짧은 값을 채울지 지정합니다. 대/소문자를 구분하지 않는 다음 값 중 하나를 지정합니다.

  • LEFT - 왼쪽에 값을 채웁니다.

  • RIGHT - 오른쪽에 값을 채웁니다.

더 짧은 값은 더 큰 값의 길이와 같아지도록 0으로 채워집니다.

이 인자는 BINARY 식이 지정된 경우에만 유효합니다.

두 BINARY 값의 길이가 서로 다른 경우 이 인자가 필요합니다.

반환

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

  • 입력 식에 INTEGER 값이 포함된 경우 입력 식의 비트 AND를 나타내는 INTEGER 값을 반환합니다.

  • 입력 식에 BINARY 값이 포함된 경우 입력 식의 비트 AND를 나타내는 BINARY 값을 반환합니다.

  • 두 입력 값 중 하나가 NULL이면 NULL을 반환합니다.

사용법 노트

  • 두 입력 식은 모두 INTEGER 또는 BINARY 중 하나의 동일한 데이터 타입의 값으로 계산되어야 합니다.

  • 두 인자 중 하나의 데이터 타입이 숫자형 이지만 INTEGER 는 아닌 경우(예: FLOAT, DECIMAL 등), 해당 인자는 INTEGER 값으로 캐스팅됩니다.

  • 두 인자 중 하나의 데이터 타입이 문자열(예: VARCHAR)인 경우, 가능한 경우 해당 인자는 INTEGER 값으로 캐스팅됩니다. 예를 들어, 문자열 12.312 로 캐스팅됩니다. 값을 INTEGER 값으로 캐스팅할 수 없는 경우, 값은 NULL로 처리됩니다.

  • 이 함수는 암시적으로 인자를 BINARY 값으로 캐스팅하지 않습니다.

다음 섹션에는 INTEGER 인자 값과 BINARY 인자 값에 대한 예가 포함되어 있습니다.

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

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

CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
Copy
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.
  ;
Copy

쿼리를 실행합니다.

SELECT bit1, 
       bit2, 
       BITAND(bit1, bit2), 
       BITOR(bit1, bit2), 
       BITXOR(bit1, BIT2)
  FROM bits
  ORDER BY bit1;
Copy
+------+-------+--------------------+-------------------+--------------------+
| 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);
Copy

참고

BINARY 값은 x'value' 표기법을 사용하여 삽입되며, 여기서 value 는 16진수 숫자를 포함합니다. 자세한 내용은 바이너리 입력 및 출력 섹션을 참조하십시오.

동일한 길이의 BINARY 열에 대한 쿼리를 실행합니다.

SELECT bit1,
       bit2,
       BITAND(bit1, bit2),
       BITOR(bit1, bit2),
       BITXOR(bit1, bit2)
  FROM bits;
Copy
+------+------+--------------------+-------------------+--------------------+
| 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;
Copy
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;
Copy
+------+----------+----------------------------+---------------------------+----------------------------+
| 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;
Copy
+------+----------+-----------------------------+----------------------------+-----------------------------+
| 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                        |
+------+----------+-----------------------------+----------------------------+-----------------------------+