BITXOR
BITXOR
BITXOR 함수는 두 숫자 또는 이진 표현식의 비트 단위 XOR(배타적 논리합)을 반환해요.
출처: BITXOR
본문
BITXOR 함수는 두 숫자 또는 이진 표현식의 비트 단위 XOR을 반환해요.
별칭 (Aliases): BIT_XOR 함께 보기 (See also): BITXOR_AGG
구문 (Syntax)
BITXOR( <expr1> , <expr2> [ , '<padside>' ] )
인자 (Arguments)
- expr1 — 이 표현식은
INTEGER값,BINARY값 또는INTEGER값으로 캐스트될 수 있는 데이터 타입의 값으로 평가되어야 해요. - expr2 — 이 표현식은
INTEGER값,BINARY값 또는INTEGER값으로 캐스트될 수 있는 데이터 타입의 값으로 평가되어야 해요. - 'padside' — 두
BINARY인자 값의 길이가 같지 않을 때, 더 짧은 길이의 값을 어느 쪽에 패딩할지 지정해요. 다음 대소문자를 구분하지 않는 값 중 하나를 지정해요:LEFT— 값의 왼쪽을 패딩,RIGHT— 값의 오른쪽을 패딩. 더 짧은 값은 더 큰 값의 길이와 같아지도록 0으로 패딩돼요. 이 인자는BINARY표현식을 지정할 때만 유효해요. 두BINARY값의 길이가 다르면 이 인자가 필수예요.
반환 (Returns)
INTEGER 값, BINARY 값 또는 NULL을 반환해요:
- 입력 표현식이
INTEGER값을 포함하면 입력 표현식의 비트 단위 XOR을 나타내는INTEGER값을 반환해요. - 입력 표현식이
BINARY값을 포함하면 입력 표현식의 비트 단위 XOR을 나타내는BINARY값을 반환해요. - 입력 값 중 하나라도
NULL이면NULL을 반환해요.
사용 메모 (Usage notes)
- 두 입력 표현식 모두
INTEGER또는BINARY의 동일한 데이터 타입 값으로 평가되어야 해요. - 인자 중 하나의 데이터 타입이 숫자이지만
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)
- BITAND, BITOR
- BITXOR_AGG
- 비트 표현식 함수 (Bitwise expression functions)