데이터 처리 도구/SQL

[MySQL] 비트 연산과 관련 함수(CONV, BIN, BIT_LENGTH)

yourhm 2022. 9. 4. 17:39

1. 비트 연산이란?

비트 단위에서 수행되는 연산이다. 즉, 2진수 형태인 비트 단위의 데이터에 대해서 연산을 수행한다. 비트 연산은 다른 연산에 비해 빠르고 메모리 사용이 적다. MySQL에서도 이러한 비트 연산을 사용할 수 있다. MySQL은 비트 연산을 지원하여 데이터베이스 내에서 효율적인 데이터 조작이 가능하다.

 

연산자 의미 설명
& 비트 AND 연산 해당 비트가 모두 1이면 1, 아니면 0
| 비트 OR 연산 해당 비트 중 하나만 1이어도 1, 아니면 0
^ 비트 XOR 연산 해당 비트의 값이 다르면 1, 같으면 0
~ 비트 NOT 연산 1은 0으로, 0은 1로 반전
<< 왼쪽 Shift 연산 지정된 갯수만큼 모든 비트를 왼쪽으로 이동
>> 오른쪽 Shift 연산 지정된 갯수만큼 모든 비트를 오른쪽으로 이동

 

[출처] https://velog.io/@jdja2004/%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90-bitwise-operator

 

 

 

2. MySQL Bit Functions and Operators

비트 연산

 

 

 

<예시>

DATA:

num
8
15
1
13
SELECT num
     , num & 8
     , num & 4
     , num & 2
     , num & 1

OUTPUT:

num num&8 num&4 num&2 num&1
8 8 0 0 0
15 8 4 2 1
1 0 0 0 1
13 8 4 0 1

 

 

(1) num&8 연산과정

num num의 이진수 8의 이진수 & 연산
8 1000 1000 1000 ⇒ 8
15 1111 1000 1000 ⇒ 8
1 0001 1000 0000 ⇒ 0
13 1101 1000 1000 ⇒ 8

 

(2) num&4 연산과정

num num의 이진수 4의 이진수 & 연산
8 1000 0100 0000 ⇒ 0
15 1111 0100 0100 ⇒ 4
1 0001 0100 0000 ⇒ 0
13 1101 0100 0100 ⇒ 4

 

(3) num&2 연산과정

num num의 이진수 2의 이진수 & 연산
8 1000 0010 0000 ⇒ 0
15 1111 0010 0010 ⇒ 2
1 0001 0010 0000 ⇒ 0
13 1101 0010 0000 ⇒ 0

 

(4) num&1 연산과정

num num의 이진수 1의 이진수 & 연산
8 1000 0001 0000 ⇒ 0
15 1111 0001 0001 ⇒ 1
1 0001 0001 0001 ⇒ 1
13 1101 0001 0001 ⇒ 1

 

 

 

CONV( ) : 다른 숫자 시스템으로 변환해주는 함수

SELECT CONV(number, from_base, to_base)

-- Example
SELECT CONV(8, 10, 2)   -- OUTPUT: '1000'
SELECT CONV(15, 10, 2)  -- OUTPUT: '1111'
SELECT CONV(1, 10, 2)   -- OUTPUT: '1'
SELECT CONV(13, 10, 2)  -- OUTPUT: '1101'

- CONV() 함수는 숫자를 한 숫자 기본 시스템에서 다른 숫자 시스템으로 변환하고 결과를 문자열 값으로 반환한다.

 

 

BIN( ) : 숫자를 이진법으로 변환해주는 함수(string function)

SELECT BIN(8)
-- OUTPUT: '1000'

- BIN() 함수는 숫자의 이진 표현을 문자열 값으로 반환한다.

 

BIT_LENGTH( ) : 문자열을 비트 수로 표현하는 함수(string function)

SELECT BIT_LENGTH('text')
-- OUTPUT: 32

- BIT_LENGTH() 함수는 문자열의 길이를 비트 수로 표시하여 반환한다.

 

 

 

[참고 자료]

●  비트연산 설명

https://velog.io/@jdja2004/%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90-bitwise-operator

https://www.tcpschool.com/c/c_refer_bitCalculation

 

●  MySQL Documentation > Bit Functions and Operators

https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html

 

●  MySQL Documentation >  Aggregate Functions

https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html

 

●  MySQL Documentation >  Mathematical Functions (CONV 함수)

https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_conv

 

●  MySQL Documentation >  String Functions and Operators (BIN 함수, BIT_STRENGTH 함수)

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_bin