В MariaDB, MAKE_SET()
е низова функция, която връща зададена стойност въз основа на стойностите, предоставени в нейните аргументи.
Наборът е низ, съдържащ поднизове, разделени със запетая (,
) символи.
Синтаксис
Синтаксисът е така:
MAKE_SET(bits,str1,str2,...)
Където str1, str2,...
е една или повече стойности на низове и bits
определя кои от тези низови стойности да бъдат включени в набора.
MAKE_SET()
връща зададена стойност, състояща се от низовете, които имат съответния бит в bits
комплект.
Пример
Ето пример за демонстрация:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Резултат:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Имайте предвид, че използва двоичното представяне на първия аргумент, за да върне приложимите низове в следващите аргументи. Следователно не е толкова просто, колкото да се каже, че първият аргумент е 1 и така отговаря на т. 1.
Ето още един пример, който илюстрира какво имам предвид:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Резултат:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Как работи
Помислете за следното:
SELECT
BIN(1) AS '1',
BIN(2) AS '2',
BIN(3) AS '3',
BIN(4) AS '4',
BIN(5) AS '5',
BIN(6) AS '6',
BIN(7) AS '7',
BIN(8) AS '8',
BIN(9) AS '9',
BIN(10) AS '10';
Резултат (с помощта на вертикален изход):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
Тук използвам BIN()
функция за връщане на двоичната стойност на всяко число.
Можем да видим, че двоичното представяне на 4
е 100
. Трябва да визуализираме това назад, за да го приложим към нашия MAKE_SET()
пример по-горе. В нашия случай това е трицифрена двоична стойност, като най-дясната цифра съответства на първия низ, следващата цифра съответства на втория низ, а най-лявата цифра съответства на третия низ.
В двоични термини, 1
е „включено“ и 0
е изключен". MAKE_SET()
функцията връща само низове, които имат съответен 1
в тяхната двоична стойност. Следователно нашият пример по-горе връща третия низ.
Ето още един пример, използващ различна стойност:
SELECT MAKE_SET(10, 'a','b','c','d');
Резултат:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
В този случай двоичната стойност е 1010
. Следователно има две 1
s, които съответстват на втория и четвъртия аргумент на низа.
Ето още няколко примера за по-нататъшно демонстриране на концепцията:
SELECT
MAKE_SET(1, 'a','b','c','d') AS '1',
MAKE_SET(2, 'a','b','c','d') AS '2',
MAKE_SET(3, 'a','b','c','d') AS '3',
MAKE_SET(4, 'a','b','c','d') AS '4',
MAKE_SET(5, 'a','b','c','d') AS '5',
MAKE_SET(6, 'a','b','c','d') AS '6',
MAKE_SET(7, 'a','b','c','d') AS '7',
MAKE_SET(8, 'a','b','c','d') AS '8',
MAKE_SET(9, 'a','b','c','d') AS '9',
MAKE_SET(10, 'a','b','c','d') AS '10';
Резултат (с помощта на вертикален изход):
1: a 2: b 3: a,b 4: c 5: a,c 6: b,c 7: a,b,c 8: d 9: a,d 10: b,d
Ето пример за използване на различен набор от низове:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Резултат (с помощта на вертикален изход):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Множество двоични стойности
Използвайте символ на тръба (|
), за да включите повече от една стойност в набора:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Резултат:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Нулеви стойности
Ако стойността на низ е null
, след което се пропуска от резултата:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Резултат:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+