카테고리:

비트 식 함수

BITSHIFTLEFT

숫자 식 또는 이진 식의 비트를 왼쪽으로 n 자리 이동합니다.

별칭:

BIT_SHIFTLEFT

참고 항목:

BITSHIFTRIGHT

구문

BITSHIFTLEFT( <expr1> , <n> )
Copy

인자

expr1

이 식은 INTEGER 값, BINARY 값 또는 INTEGER 값으로 캐스팅될 수 있는 데이터 타입의 값으로 계산되어야 합니다.

n

이동할 비트 수입니다.

반환

INTEGER 값, BINARY 값 또는 NULL을 반환합니다.

  • 입력 식에 INTEGER 값이 포함된 경우 입력 데이터 값의 크기 또는 데이터 타입과 관계없이, 부호 있는 128비트(16바이트) 정수를 반환합니다.

  • 입력 식에 BINARY 값이 포함된 경우 BINARY 값을 반환합니다.

  • 인자가 NULL인 경우 NULL을 반환합니다.

사용법 노트

  • 인자의 데이터 타입이 숫자형 이지만 INTEGER는 아닌 경우(예: FLOAT, DECIMAL 등), 해당 인자는 INTEGER 값으로 캐스팅됩니다.

  • 인자의 데이터 타입이 문자열(예: VARCHAR)인 경우, 가능한 경우 해당 인자는 INTEGER 값으로 캐스팅됩니다. 예를 들어, 문자열 12.312 로 캐스팅됩니다. 값을 INTEGER 값으로 캐스팅할 수 없는 경우, 값은 NULL로 처리됩니다.

  • 부호 있는 INTEGER 값이 반환되고 상위 비트의 값이 변경되면(0에서 1 또는 1에서 0으로) 결과의 부호가 반전됩니다. 예를 들어, BITSHIFTLEFT(1, 127) 은 음수를 반환합니다.

  • 부호 있는 INTEGER 값이 반환되면 128비트 출력 값의 끝을 지나 이동된 비트는 삭제됩니다.

  • 이 함수는 암시적으로 인자를 BINARY 값으로 캐스팅하지 않습니다.

다음 섹션에는 INTEGER 인자 값과 BINARY 인자 값에 대한 예가 포함되어 있습니다.

INTEGER 인자 값과 함께 BITSHIFTLEFT 및 BITSHIFTRIGHT 사용하기

간단한 테이블과 데이터를 만듭니다.

CREATE OR REPLACE TABLE bits (ID INTEGER, bit1 INTEGER, bit2 INTEGER);
Copy
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.
  ;
Copy

쿼리를 실행합니다.

SELECT bit1, 
       bit2, 
       BITSHIFTLEFT(bit1, 1), 
       BITSHIFTRIGHT(bit2, 1)
  FROM bits
  ORDER BY bit1;
Copy
+------+-------+-----------------------+------------------------+
| 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);
Copy

참고

BINARY 값은 x'value' 표기법을 사용하여 삽입되며, 여기서 value 는 16진수 숫자를 포함합니다. 자세한 내용은 바이너리 입력 및 출력 섹션을 참조하십시오.

쿼리를 실행합니다.

SELECT bit1,
       bit3,
       BITSHIFTLEFT(bit1, 1),
       BITSHIFTLEFT(bit3, 1),
       BITSHIFTLEFT(bit1, 8),
       BITSHIFTLEFT(bit3, 16)
  FROM bits;
Copy
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+
| 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                   |
+------+----------+-----------------------+-----------------------+-----------------------+------------------------+