BITAND
구문
BITAND(expr1, expr2)
목적
BITAND 함수는 입력과 출력을 비트 벡터로 처리하며, 출력은 입력들의 비트 AND 연산 결과입니다.
expr1과 expr2의 데이터 타입은 NUMBER이며, 결과도 NUMBER 타입입니다. BITAND 함수의 어떤 인수라도 NULL이면 결과도 NULL이 됩니다.
인수들은 -(2(n-1))에서 ((2(n-1)))-1) 범위에 있어야 합니다. 만약 인수 중 하나라도 이 범위를 벗어난다면, 결과는 정의되지 않습니다.
결과는 여러 단계를 거쳐 계산됩니다. 먼저, 각 인수 A는 SIGN(A)*FLOOR(ABS(A)) 값으로 대체됩니다. 이 변환은 각 인수를 0으로 가까이 버립니다. 그다음, 각 인수 A (이제는 정수 값)는 n비트 2의 보수 이진 정수 값으로 변환됩니다. 두 비트 값은 비트 AND 연산을 사용하여 결합됩니다. 마지막으로, 얻어진 n비트 2의 보수 값은 다시 NUMBER 타입으로 변환됩니다.
BITAND 함수에 대한 주의 사항
- 현재의 BITAND 함수 구현은 n = 128로 정의됩니다.
- PL/SQL은 입력과 결과의 모든 타입이 BINARY_INTEGER이고, n = 32인 BITAND 함수에 대한 오버로드를 지원합니다.
예제
다음 예제는 숫자 6 (이진수 1,1,0)과 3 (이진수 0,1,1)에 대해 AND 연산을 수행합니다:
SELECT BITAND(6,3)
FROM DUAL;
BITAND(6,3)
-----------
2
이것은 다음 예제와 같습니다. 이 예제에서는 6과 3의 이진수 값을 보여줍니다. BITAND 함수는 이진수 값의 유효한 자릿수에만 작용합니다:
SELECT BITAND(
BIN_TO_NUM(1,1,0),
BIN_TO_NUM(0,1,1)) "Binary"
FROM DUAL;
Binary
----------
2
BIN_TO_NUM의 예제에서는 하나의 컬럼 값에 여러 값을 인코딩하는 방법에 대한 정보를 참조하세요.
다음 예제는 oe.orders 테이블의 order_status 컬럼이 하나의 숫자 값 내에서 개별 비트로 여러 선택 사항을 인코딩한다고 가정합니다. 예를 들어, 창고에 있는 주문은 이진값 001 (십진수 1)로 표현됩니다. 지상 운송으로 발송되는 주문은 이진값 010 (십진수 2)로 표현됩니다. 보험 적용된 소포는 이진값 100 (십진수 4)로 표현됩니다. 이 예제에서는 DECODE 함수를 사용하여 order_status 값의 세 개의 비트 각각에 대해 비트가 켜져 있을 때와 꺼져 있을 때 각각 두 가지 값이 제공됩니다.
SELECT order_id, customer_id, order_status,
DECODE(BITAND(order_status, 1), 1, 'Warehouse', 'PostOffice') "Location",
DECODE(BITAND(order_status, 2), 2, 'Ground', 'Air') "Method",
DECODE(BITAND(order_status, 4), 4, 'Insured', 'Certified') "Receipt"
FROM orders
WHERE sales_rep_id = 160
ORDER BY order_id;
ORDER_ID CUSTOMER_ID ORDER_STATUS Location Method Receipt
---------- ----------- ------------ ---------- ------ ---------
2416 104 6 PostOffice Ground Insured
2419 107 3 Warehouse Ground Certified
2420 108 2 PostOffice Ground Certified
2423 145 3 Warehouse Ground Certified
2441 106 5 Warehouse Air Insured
2455 145 7 Warehouse Ground Insured
Location 컬럼의 경우, BITAND 함수는 먼저 order_status와 1 (이진값 001)을 비교합니다. 유의미한 비트 값만 비교되므로, 오른쪽 비트에 1이 있는 이진값 (홀수)은 양수로 평가되어 1을 반환합니다. 짝수는 0을 반환합니다. DECODE 함수는 BITAND가 반환한 값과 1을 비교합니다. 둘 다 1이면 위치는 "창고"입니다. 다르면 위치는 "우체국"입니다.
Method와 Receipt 컬럼은 비슷한 방식으로 계산됩니다. Method의 경우, BITAND는 order_status와 2 (이진값 010)에 대해 AND 연산을 수행합니다. Receipt의 경우, BITAND는 order_status와 4 (이진값 100)에 대해 AND 연산을 수행합니다.
출처: 오라클 레퍼런스
원문 링크: Oracle BITAND 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] BITMAP_BUCKET_NUMBER - 숫자와 비트맵 내의 비트 위치 사이의 일대일 매핑 (0) | 2023.07.31 |
---|---|
[오라클 레퍼런스 함수] BITMAP_BIT_POSITION - 숫자와 비트 위치 사이의 일대일 매핑 (0) | 2023.07.31 |
[오라클 레퍼런스 함수] BIN_TO_NUM - 비트 벡터를 숫자로 변환 (0) | 2023.07.31 |
[오라클 레퍼런스 함수] BFILENAME - BFILE 로케이터를 반환 (0) | 2023.07.31 |
[오라클 레퍼런스 함수] AVG - 평균값 계산 (0) | 2023.07.30 |
댓글