I MariaDB, MAKE_SET()
är en strängfunktion som returnerar ett inställt värde, baserat på de värden som anges i dess argument.
En uppsättning är en sträng som innehåller delsträngar separerade med kommatecken (,
) tecken.
Syntax
Syntaxen ser ut så här:
MAKE_SET(bits,str1,str2,...)
Där str1, str2,...
är ett eller flera strängvärden och bits
anger vilka av dessa strängvärden som ska inkluderas i uppsättningen.
MAKE_SET()
returnerar ett uppsättningsvärde som består av strängarna som har motsvarande bit i bits
uppsättning.
Exempel
Här är ett exempel att visa:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Resultat:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Observera att den använder den binära representationen av det första argumentet för att returnera de tillämpliga strängarna i de efterföljande argumenten. Därför är det inte så enkelt som att säga, det första argumentet var 1 och så motsvarade det punkt 1.
Här är ett annat exempel som illustrerar vad jag menar:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Resultat:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Så fungerar det
Tänk på följande:
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';
Resultat (med vertikal utdata):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
Här använder jag BIN()
funktion för att returnera varje nummers binära värde.
Vi kan se att den binära representationen av 4
är 100
. Vi måste visualisera detta baklänges för att kunna tillämpa det på vår MAKE_SET()
exemplet ovan. I vårt fall är detta ett tresiffrigt binärt värde, där siffran längst till höger motsvarar den första strängen, nästa siffra motsvarar den andra strängen och siffran längst till vänster motsvarar den tredje strängen.
I binära termer, 1
är "på" och 0
är av". MAKE_SET()
funktion returnerar endast strängar som har en motsvarande 1
i deras binära värde. Därför returnerar vårt exempel ovan den tredje strängen.
Här är ett annat exempel med ett annat värde:
SELECT MAKE_SET(10, 'a','b','c','d');
Resultat:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
I det här fallet är det binära värdet 1010
. Den har därför två 1
s, som motsvarar de andra och fjärde strängargumenten.
Här är några fler exempel för att demonstrera konceptet ytterligare:
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';
Resultat (med vertikal utdata):
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
Här är ett exempel med en annan uppsättning strängar:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Resultat (med vertikal utdata):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Flera binära värden
Använd en rörsymbol (|
) för att inkludera mer än ett värde i uppsättningen:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Resultat:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Nullvärden
Om ett strängvärde är null
, då utelämnas det från resultatet:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Resultat:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+