비트 연산 함수
비트 연산 함수 (Bitwise Functions)
비트 연산 스칼라 함수는 INT와 LONG 정수 타입에 대해 비트 단위 연산을 수행해요.
출처: 문서
본문
타입 동작 방식
- INT 입력: 모든 인자가 INT이면 결과는 INT
- 혼합 또는 LONG 입력: 어떤 인자라도 LONG이면 결과는 LONG
- bitExtract: 입력 타입과 무관하게 항상 INT 반환
bitAnd / bit_and
두 값에 대해 비트 단위 AND 연산을 수행해요.
시그니처
bitAnd(a, b) bit_and(a, b)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 첫 번째 값 |
b |
INT 또는 LONG | 두 번째 값 |
반환 타입: 둘 다 INT면 INT, 하나라도 LONG이면 LONG
사용 예시
SELECT bitAnd(12, 10) AS value
FROM myTable
| value |
|---|
| 8 |
SELECT bitAnd(intCol, 3) AS masked
FROM myTable
bitOr / bit_or
두 값에 대해 비트 단위 OR 연산을 수행해요.
시그니처
bitOr(a, b) bit_or(a, b)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 첫 번째 값 |
b |
INT 또는 LONG | 두 번째 값 |
반환 타입: 둘 다 INT면 INT, 하나라도 LONG이면 LONG
사용 예시
SELECT bitOr(8, 4) AS value
FROM myTable
| value |
|---|
| 12 |
SELECT bitOr(intCol, 8) AS flags
FROM myTable
bitXor / bit_xor
두 값에 대해 비트 단위 XOR(배타적 OR) 연산을 수행해요.
시그니처
bitXor(a, b) bit_xor(a, b)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 첫 번째 값 |
b |
INT 또는 LONG | 두 번째 값 |
반환 타입: 둘 다 INT면 INT, 하나라도 LONG이면 LONG
사용 예시
SELECT bitXor(12, 10) AS value
FROM myTable
| value |
|---|
| 6 |
SELECT bitXor(intCol, 1) AS toggled
FROM myTable
bitNot
값의 모든 비트를 반전시키는 비트 단위 NOT 연산을 수행해요.
시그니처
bitNot(a)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 반전할 값 |
반환 타입: INT면 INT, LONG이면 LONG
사용 예시
SELECT bitNot(0) AS value
FROM myTable
| value |
|---|
| -1 |
SELECT bitNot(intCol) AS inverted
FROM myTable
bitMask
위치 n에 단일 비트가 설정된 비트마스크를 만들어요.
시그니처
bitMask(n)
| 인자 | 타입 | 설명 |
|---|---|---|
n |
INT | 비트 위치(0부터 시작) |
반환 타입: INT
사용 예시
SELECT bitMask(0) AS value
FROM myTable
| value |
|---|
| 1 |
SELECT bitMask(3) AS value
FROM myTable
| value |
|---|
| 8 |
SELECT bitMask(6) AS flags
FROM myTable
bitShiftLeft
왼쪽 비트 시프트 연산을 수행해요.
시그니처
bitShiftLeft(a, n)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 시프트할 값 |
n |
INT | 시프트할 위치 수 |
반환 타입: a가 INT면 INT, LONG이면 LONG
사용 예시
SELECT bitShiftLeft(1, 2) AS value
FROM myTable
| value |
|---|
| 4 |
SELECT bitShiftLeft(intCol, 2) AS shifted
FROM myTable
bitShiftRight
산술(부호 확장) 오른쪽 비트 시프트 연산을 수행해요.
시그니처
bitShiftRight(a, n)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 시프트할 값 |
n |
INT | 시프트할 위치 수 |
반환 타입: a가 INT면 INT, LONG이면 LONG
사용 예시
SELECT bitShiftRight(8, 2) AS value
FROM myTable
| value |
|---|
| 2 |
SELECT bitShiftRight(intCol, 1) AS shifted
FROM myTable
bitShiftRightUnsigned / bitShiftRightLogical
논리(부호 없는) 오른쪽 비트 시프트 연산을 수행하며, 0으로 채워요.
시그니처
bitShiftRightUnsigned(a, n) bitShiftRightLogical(a, n)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 시프트할 값 |
n |
INT | 시프트할 위치 수 |
반환 타입: a가 INT면 INT, LONG이면 LONG
사용 예시
SELECT bitShiftRightUnsigned(-1, 1) AS value
FROM myTable
| value |
|---|
| 2147483647 |
SELECT bitShiftRightUnsigned(intCol, 1) AS shifted
FROM myTable
bitExtract / extractBit
위치 n의 비트를 추출하며, 비트가 설정되어 있으면 1을, 그렇지 않으면 0을 반환해요.
시그니처
bitExtract(a, n) extractBit(a, n)
| 인자 | 타입 | 설명 |
|---|---|---|
a |
INT 또는 LONG | 추출할 값 |
n |
INT | 비트 위치(0부터 시작) |
반환 타입: 입력 타입과 무관하게 항상 INT
사용 예시
SELECT bitExtract(12, 2) AS value
FROM myTable
| value |
|---|
| 1 |
SELECT bitExtract(12, 0) AS value
FROM myTable
| value |
|---|
| 0 |
SELECT id FROM myTable WHERE bitExtract(flags, 2) = 1
결합 사용 예시
SELECT
id,
bitAnd(flags, 15) AS lower_nibble,
bitOr(flags, 128) AS set_high_bit,
bitExtract(status, 3) AS is_active,
bitShiftLeft(count, 2) AS quad_count
FROM myTable
WHERE bitExtract(flags, 2) = 1