본문 바로가기

Oracle/SQL Query

BITAND (비트단위 AND연산 함수)

BITAND (비트단위 AND연산 함수)

BITAND 함수는 파라미터로 주어지는 expr1, expr2값에 대해서 비트단위 AND 연산을 수행한다.
정수값 5(이진수 101)와 정수값 1(이진수 001)을 파라미터로 주면, 정수값 1(이진수 1)을 반환한다. 파라미터는 음수가 아닌 정수값이어야 하고, 정수값을 반환한다.

오라클 문서에는 BITAND 함수가 DECODE와 함께 써서 아래 형태로 자주 사용된다고 했는데,

 

   DECODE(BITAND(col, 1), 1, ...

이렇게 함께 사용하는 것이 과연 쓸모가 많은지는 의문을 가지게 한다.

 

아래 예제로 BITAND 함수의 쓸모를 찾아보도록 하자.
(특히 두 번째 파라미터가 1,2,4,8 인 경우를 눈여겨 보도록 하자.)

 

  SELECT    rownum
           , BITAND (rownum, 1) ba1
           , BITAND (rownum, 2) ba2
           , BITAND (rownum, 3) ba3
           , BITAND (rownum, 4) ba4
           , BITAND (rownum, 5) ba5
           , BITAND (rownum, 6) ba6
           , BITAND (rownum, 7) ba7
           , BITAND (rownum, 8) ba8
  from dict
  where rownum <= 100;

 

ROWNUM BA1 BA2 BA3 BA4 BA5 BA6 BA7 BA8
1 1 0 1 0 1 0 1 0
2 0 2 2 0 0 2 2 0
3 1 2 3 0 1 2 3 0
4 0 0 0 4 4 4 4 0
5 1 0 1 4 5 4 5 0
6 0 2 2 4 4 6 6 0
7 1 2 3 4 5 6 7 0
8 0 0 0 0 0 0 0 8
9 1 0 1 0 1 0 1 8
10 0 2 2 0 0 2 2 8
11 1 2 3 0 1 2 3 8
12 0 0 0 4 4 4 4 8
13 1 0 1 4 5 4 5 8
14 0 2 2 4 4 6 6 8
15 1 2 3 4 5 6 7 8
16 0 0 0 0 0 0 0 0
17 1 0 1 0 1 0 1 0
18 0 2 2 0 0 2 2 0
19 1 2 3 0 1 2 3 0
20 0 0 0 4 4 4 4 0
21 1 0 1 4 5 4 5 0
22 0 2 2 4 4 6 6 0
23 1 2 3 4 5 6 7 0
24 0 0 0 0 0 0 0 8
25 1 0 1 0 1 0 1 8
26 0 2 2 0 0 2 2 8
27 1 2 3 0 1 2 3 8
28 0 0 0 4 4 4 4 8
29 1 0 1 4 5 4 5 8
30 0 2 2 4 4 6 6 8
31 1 2 3 4 5 6 7 8
32 0 0 0 0 0 0 0 0
33 1 0 1 0 1 0 1 0
34 0 2 2 0 0 2 2 0
35 1 2 3 0 1 2 3 0
36 0 0 0 4 4 4 4 0
37 1 0 1 4 5 4 5 0
38 0 2 2 4 4 6 6 0
39 1 2 3 4 5 6 7 0
40 0 0 0 0 0 0 0 8
41 1 0 1 0 1

 

       ~ 생략 ~

 

95 1 2 3 4 5 6 7 8
96 0 0 0 0 0 0 0 0
97 1 0 1 0 1 0 1 0
98 0 2 2 0 0 2 2 0
99 1 2 3 0 1 2 3 0
100 0 0 0 4 4 4 4 0

 

출처 : http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1030&seq=301

추가 : 출처의 쿼리가 제대로 수행되지 않으므로 쿼리문은 약간 수정했다.