BITNOT

BITNOT

비트 연산 함수예요. 숫자나 바이너리 값을 가져와서 각 비트를 뒤집은(비트 NOT) 결과를 돌려줘요. BIT_NOT이라는 별칭으로도 쓸 수 있어요.

출처: 공식 문서

본문

숫자 또는 바이너리 표현식의 비트별 부정(bitwise negation)을 반환합니다.

별칭 (Aliases): BIT_NOT

구문 (Syntax)

BITNOT( <expr> )

인자 (Arguments)

expr

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

반환값 (Returns)

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

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

사용 참고 (Usage notes)

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

예제 (Examples)

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

INTEGER 인자 값과 함께 BITNOT 사용하기

간단한 테이블과 데이터를 만듭니다:

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,
       BITNOT(bit1),
       BITNOT(bit2)
  FROM bits
  ORDER BY bit1;
+------+-------+--------------+--------------+
| BIT1 |  BIT2 | BITNOT(BIT1) | BITNOT(BIT2) |
|------+-------+--------------+--------------|
|    0 | 65504 |           -1 |       -65505 |
|    1 |     1 |           -2 |           -2 |
|    2 |     4 |           -3 |           -5 |
|    4 |     2 |           -5 |           -3 |
|   16 |    24 |          -17 |          -25 |
| NULL |  NULL |         NULL |         NULL |
+------+-------+--------------+--------------+

BINARY 인자 값과 함께 BITNOT 사용하기

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

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을 참고하세요.

쿼리를 실행합니다:

SELECT bit1,
       bit2,
       bit3,
       BITNOT(bit1),
       BITNOT(bit2),
       BITNOT(bit3)
  FROM bits;
+------+------+----------+--------------+--------------+--------------+
| BIT1 | BIT2 | BIT3     | BITNOT(BIT1) | BITNOT(BIT2) | BITNOT(BIT3) |
|------+------+----------+--------------+--------------+--------------|
| 1010 | 0101 | 11001010 | EFEF         | FEFE         | EEFFEFEF     |
| 1100 | 0011 | 01011010 | EEFF         | FFEE         | FEFEEFEF     |
| BCBC | EEFF | ABCDABCD | 4343         | 1100         | 54325432     |
| NULL | NULL | NULL     | NULL         | NULL         | NULL         |
+------+------+----------+--------------+--------------+--------------+

더 알아보기 (Learn more)