W MariaDB, MAKE_SET()
to funkcja tekstowa, która zwraca ustawioną wartość na podstawie wartości podanych w jej argumentach.
Zbiór to ciąg zawierający podciągi oddzielone przecinkiem (,
) znaków.
Składnia
Składnia wygląda tak:
MAKE_SET(bits,str1,str2,...)
Gdzie str1, str2,...
to co najmniej jedna wartość ciągu i bits
określa, które z tych wartości ciągów mają zostać uwzględnione w zestawie.
MAKE_SET()
zwraca ustawioną wartość składającą się z ciągów, które mają odpowiedni bit w bits
ustawić.
Przykład
Oto przykład do zademonstrowania:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Wynik:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Zauważ, że używa reprezentacji binarnej pierwszego argumentu, aby zwrócić odpowiednie ciągi w kolejnych argumentach. Dlatego nie jest to tak proste, jak stwierdzenie, że pierwszym argumentem był 1, a więc odpowiadał punktowi 1.
Oto kolejny przykład ilustrujący to, co mam na myśli:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Wynik:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Jak to działa
Rozważ następujące kwestie:
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';
Wynik (przy użyciu wyjścia pionowego):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
Tutaj używam BIN()
funkcja zwracająca wartość binarną każdej liczby.
Widzimy, że binarna reprezentacja 4
to 100
. Musimy to zwizualizować wstecz, aby zastosować to do naszego MAKE_SET()
przykład powyżej. W naszym przypadku jest to trzycyfrowa wartość binarna, przy czym skrajna prawa cyfra odpowiada pierwszemu ciągowi, następna cyfra odpowiada drugiemu ciągowi, a skrajna lewa cyfra odpowiada trzeciemu ciągowi.
W kategoriach binarnych 1
jest „włączony” i 0
jest wyłączony". MAKE_SET()
funkcja zwraca tylko ciągi, które mają odpowiadające 1
w ich wartości binarnej. Dlatego nasz przykład powyżej zwraca trzeci ciąg.
Oto kolejny przykład z użyciem innej wartości:
SELECT MAKE_SET(10, 'a','b','c','d');
Wynik:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
W tym przypadku wartość binarna to 1010
. Dlatego ma dwa 1
s, które odpowiadają drugiemu i czwartemu argumentowi ciągu.
Oto kilka przykładów, aby lepiej zademonstrować tę koncepcję:
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';
Wynik (przy użyciu wyjścia pionowego):
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
Oto przykład użycia innego zestawu ciągów:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Wynik (przy użyciu wyjścia pionowego):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Wiele wartości binarnych
Użyj symbolu potoku (|
) aby dołączyć więcej niż jedną wartość w zestawie:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Wynik:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Wartości puste
Jeśli wartość ciągu to null
, to jest pomijane w wyniku:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Wynik:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+