안녕하세요
case 관련하여 문의를 드리고자 합니다.
create table #aaa ( bb int )
insert #aaa values (0)
insert #aaa values (1)
insert #aaa values (3)
insert #aaa values (5)
insert #aaa values (7)
위와 같이 bb 필드에 0, 1, 3, 5, 7의 숫자값이 들어 있습니다.
select bb, case when (bb | 1) = bb then 'O' else 'X' end as A, bb | 1 as AA,
case when (bb | 2) = bb then 'O' else 'X' end as B, bb | 2 as BB,
case when (bb | 4) = bb then 'O' else 'X' end as C, bb | 4 as CC,
case when (bb | 8) = bb then 'O' else 'X' end as D, bb | 8 as DD
from #aaa;
이렇게 query를 실행했을 경우 결과값이
0 X 1 X 2 X 4 X 8
1 O 1 X 3 X 5 X 9
3 O 3 O 3 X 7 X 11
5 O 5 X 7 O 5 X 13
7 O 7 O 7 O 7 X 15
어떻게 이런 구조로 나오는지 이해가 되질 않습니다.
1번 행의 경우 bb가 0이면 각각의 1, 2, 4, 8값으로 나온다고 이해는 하지만
2번 행의 경우 bb가 1이면 BB 필드에서 값이 왜 3이 되는지 이해가 안되네요.
뭔가 규칙은 있는거 같은데.
그 규칙을 찾지 못하겠습니다.
쉽게 bb|1 의 경우 둘중에 큰수를 따라 오는건지..
어떻게 계산이 되는건지..
답변 부탁 드리겠습니다.
Comment 2
-
호짱
2013.02.28 11:12
답변 감사드립니다.
또 다시 하나를 배워 가네요.
감사합니다.
"|" 연산자는 비트단위 논리적 OR를 계산하는 연산자입니다.
예를 들어서 2|5라면
이진수로 표현하면 0010|0101 되는거고
각각 논리 OR를 계산하면 0111이 되어서 7이 반환됩니다. (SELECT 2|5)
쉽게, 둘중 하나라도 1이면 1이라는 거죠
0010 OR
0101 =
0111