BITSHIFTLEFT
BITSHIFTLEFT
숫자 또는 이진 표현식의 비트를 n 위치만큼 왼쪽으로 이동시키는 비트 단위 표현식 함수예요.
출처: 공식 문서
본문
숫자 또는 이진 표현식의 비트를 n 위치만큼 왼쪽으로 이동시킵니다.
참고 (See also): BIT_SHIFTLEFT, BITSHIFTRIGHT
구문 (Syntax)
BITSHIFTLEFT( <expr1> , <n> )
인자 (Arguments)
이 표현식은 INTEGER 값, BINARY 값, 또는 INTEGER 값으로 형변환될 수 있는 데이터 타입의 값으로 평가되어야 합니다.
이동시킬 비트 수입니다.
반환값 (Returns)
INTEGER 값, BINARY 값 또는 NULL을 반환합니다:
-
입력 표현식이 INTEGER 값을 포함하면 입력 데이터 값의 크기나 데이터 타입과 관계없이 부호 있는 128비트(16바이트) 정수를 반환합니다.
-
입력 표현식이 BINARY 값을 포함하면 BINARY 값을 반환합니다.
-
어떤 인자라도 NULL이면 NULL을 반환합니다.
사용 참고 사항 (Usage notes)
-
어떤 인자의 데이터 타입이 숫자이면서 INTEGER가 아니면(예: FLOAT, DECIMAL 등), 해당 인자는 INTEGER 값으로 형변환됩니다.
-
어떤 인자의 데이터 타입이 문자열이면(예: VARCHAR), 가능하면 인자가 INTEGER 값으로 형변환됩니다. 예를 들어 문자열 12.3은 12로 형변환됩니다. 값을 INTEGER 값으로 형변환할 수 없으면 값은 NULL로 처리됩니다.
-
부호 있는 INTEGER 값이 반환되고 최상위 비트(high bit)의 값이 변경되면(0에서 1로, 또는 1에서 0으로) 결과의 부호가 반전됩니다. 예를 들어 BITSHIFTLEFT(1, 127)은 음수를 반환합니다.
-
부호 있는 INTEGER 값이 반환되면 128비트 출력 값의 끝을 지나 이동된 비트는 버려집니다.
-
이 함수는 인자를 BINARY 값으로 암시적으로 형변환하지 않습니다.
예제 (Examples)
다음 섹션들은 INTEGER 인자 값과 BINARY 인자 값에 대한 예제를 포함합니다.
INTEGER 인자 값과 함께 BITSHIFTLEFT 및 BITSHIFTRIGHT 사용하기
간단한 테이블과 데이터를 만듭니다:
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,
BITSHIFTLEFT(bit1, 1),
BITSHIFTRIGHT(bit2, 1)
FROM bits
ORDER BY bit1;
+------+-------+-----------------------+------------------------+
| BIT1 | BIT2 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTRIGHT(BIT2, 1) |
|------+-------+-----------------------+------------------------|
| 0 | 65504 | 0 | 32752 |
| 1 | 1 | 2 | 0 |
| 2 | 4 | 4 | 2 |
| 4 | 2 | 8 | 1 |
| 16 | 24 | 32 | 12 |
| NULL | NULL | NULL | NULL |
+------+-------+-----------------------+------------------------+
BINARY 인자 값과 함께 BITSHIFTLEFT 사용하기
간단한 테이블을 만들고 데이터를 삽입합니다:
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);
참고 (Note): BINARY 값은 x'value' 표기법을 사용해 삽입되며, 여기서 value는 16진수 자릿수를 포함합니다. 자세한 내용은 Binary input and output을 참고하세요.
쿼리를 실행합니다:
SELECT bit1,
bit3,
BITSHIFTLEFT(bit1, 1),
BITSHIFTLEFT(bit3, 1),
BITSHIFTLEFT(bit1, 8),
BITSHIFTLEFT(bit3, 16)
FROM bits;
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
| BIT1 | BIT3 | BITSHIFTLEFT(BIT1, 1) | BITSHIFTLEFT(BIT3, 1) | BITSHIFTLEFT(BIT1, 8) | BITSHIFTLEFT(BIT3, 16) |
|------+----------+-----------------------+-----------------------+-----------------------+------------------------|
| 1010 | 11001010 | 2020 | 22002020 | 1000 | 10100000 |
| 1100 | 01011010 | 2200 | 02022020 | 0000 | 10100000 |
| BCBC | ABCDABCD | 7978 | 579B579A | BC00 | ABCD0000 |
| NULL | NULL | NULL | NULL | NULL | NULL |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+