MySQL의 MAKE_SET() 함수는 10진수를 비트(2진수)로 변환한 뒤, 해당 수에서 설정된(set) 모든 비트에 대응하는 문자열을 쉼표로 구분된 집합 형태로 반환하는 함수입니다. 이때 첫 번째 문자열은 최하위 비트에, 두 번째 문자열은 그다음 비트에 순서대로 매핑됩니다.
문법(Syntax)
MAKE_SET(bits, str1, str2,…)
- bits: 10진수 또는 2진수 값을 가질 수 있는 표현식입니다.
- str1, str2…: 각 비트에 대응되는 문자열 목록입니다.
동작 원리
MAKE_SET() 함수는 전달받은 숫자를 2진수로 해석한 후, 각 비트 자리가 1인 경우에만 해당 위치의 문자열을 결과에 포함시킵니다. 비트가 0이면 해당 문자열은 결과에서 제외되며, NULL로 지정된 문자열 역시 결과 집합에 포함되지 않습니다.
예제(Example)
mysql> Select MAKE_SET(1|2|4, 'Tutorials','Point','.com'); +---------------------------------------------+ | MAKE_SET(1|2|4, 'Tutorials','Point','.com') | +---------------------------------------------+ | Tutorials,Point,.com | +---------------------------------------------+ 1 row in set (0.00 sec)
결과 분석
위 예제에서 1|2|4는 비트 OR 연산으로 결합된 값 7(2진수 111)을 의미합니다. 각 비트를 살펴보면 다음과 같습니다.
- 첫 번째 비트: 1(001) → 가장 오른쪽 자리가 1이므로 'Tutorials' 반환
- 두 번째 비트: 2(010) → 가운데 자리가 1이므로 'Point' 반환
- 세 번째 비트: 4(100) → 가장 왼쪽 자리가 1이므로 '.com' 반환
따라서 세 문자열이 모두 포함되어 최종 결과로 'Tutorials,Point,.com'이 출력됩니다. 만약 특정 비트가 0이라면 해당 위치의 문자열은 결과에서 빠지게 됩니다. 예를 들어 MAKE_SET(5, 'A','B','C')의 경우 5는 2진수로 101이므로 첫 번째와 세 번째 비트만 설정되어 'A,C'가 반환됩니다.