BITSHIFTRIGHT

BITSHIFTRIGHT (오른쪽 비트 시프트)

숫자 또는 이진 표현식의 비트를 n 위치만큼 오른쪽으로 이동해요.

별칭: BIT_SHIFTRIGHT

참조: BITSHIFTLEFT

출처: Snowflake SQL Reference - BITSHIFTRIGHT

본문

구문

BITSHIFTRIGHT( <expr1>, <n> )

인자

expr1

이 표현식은 INTEGER 값, BINARY 값, 또는 INTEGER 값으로 캐스트할 수 있는 데이터 타입의 값으로 평가되어야 해요.

n

이동할 비트 수예요.

반환 값

INTEGER 값, BINARY 값, 또는 NULL을 반환해요:

  • 입력 표현식이 INTEGER 값을 포함하면 입력 데이터 값의 크기나 데이터 타입과 관계없이 부호 있는 128비트(16바이트) 정수를 반환해요.
  • 입력 표현식이 BINARY 값을 포함하면 BINARY 값을 반환해요.
  • 어떤 인자가 NULL이면 NULL을 반환해요.

사용상 주의사항

  • 인자의 데이터 타입이 숫자지만 INTEGER가 아니면(예: FLOAT, DECIMAL 등), 인자는 INTEGER 값으로 캐스트돼요.
  • 인자의 데이터 타입이 문자열이면(예: VARCHAR), 가능하면 인자는 INTEGER 값으로 캐스트돼요. 예를 들어 문자열 12.3은 12로 캐스트돼요. 값이 INTEGER 값으로 캐스트될 수 없으면 값은 NULL로 처리돼요.
  • 함수는 인자를 BINARY 값으로 암시적으로 캐스트하지 않아요.

예시

다음 섹션들은 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 인자 값과 함께 BITSHIFTRIGHT 사용

간단한 테이블을 만들고 데이터 삽입:

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);

참고: BINARY 값은 x'value' 표기법을 사용해 삽입되는데, 여기서 value는 16진수 자릿수를 포함해요. 자세한 내용은 Binary input and output를 참고해요.

쿼리 실행:

SELECT bit1,
       bit3,
       BITSHIFTRIGHT(bit1, 1),
       BITSHIFTRIGHT(bit3, 1),
       BITSHIFTRIGHT(bit1, 8),
       BITSHIFTRIGHT(bit3, 16)
  FROM bits;
+------+----------+------------------------+------------------------+------------------------+-------------------------+
| BIT1 | BIT3     | BITSHIFTRIGHT(BIT1, 1) | BITSHIFTRIGHT(BIT3, 1) | BITSHIFTRIGHT(BIT1, 8) | BITSHIFTRIGHT(BIT3, 16) |
|------+----------+------------------------+------------------------+------------------------+-------------------------|
| 1010 | 11001010 | 0808                   | 08800808               | 0010                   | 00001100                |
| 1100 | 01011010 | 0880                   | 00808808               | 0011                   | 00000101                |
| BCBC | ABCDABCD | 5E5E                   | 55E6D5E6               | 00BC                   | 0000ABCD                |
| NULL | NULL     | NULL                   | NULL                   | NULL                   | NULL                    |
+------+----------+------------------------+------------------------+------------------------+-------------------------+

더 알아보기