In MariaDB, MAKE_SET()
is een tekenreeksfunctie die een ingestelde waarde retourneert, gebaseerd op de waarden in de argumenten.
Een set is een tekenreeks die subtekenreeksen bevat, gescheiden door komma's (,
) tekens.
Syntaxis
De syntaxis gaat als volgt:
MAKE_SET(bits,str1,str2,...)
Waar str1, str2,...
is een of meer tekenreekswaarden en bits
specificeert welke van die tekenreekswaarden in de set moeten worden opgenomen.
MAKE_SET()
geeft een ingestelde waarde terug die bestaat uit de tekenreeksen met de corresponderende bit in bits
set.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Resultaat:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Merk op dat het de binaire representatie . gebruikt van het eerste argument om de toepasselijke strings in de volgende argumenten te retourneren. Daarom is het niet zo simpel als zeggen, het eerste argument was 1 en dat kwam dus overeen met item 1.
Hier is nog een voorbeeld dat illustreert wat ik bedoel:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Resultaat:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Hoe het werkt
Overweeg het volgende:
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';
Resultaat (met verticale uitvoer):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
Hier gebruik ik de BIN()
functie om de binaire waarde van elk getal te retourneren.
We kunnen zien dat de binaire representatie van 4
is 100
. We moeten dit achterstevoren visualiseren om het toe te passen op onze MAKE_SET()
voorbeeld hierboven. In ons geval is dit een binaire waarde van drie cijfers, waarbij het meest rechtse cijfer overeenkomt met de eerste reeks, het volgende cijfer overeenkomt met de tweede reeks en het meest linkse cijfer overeenkomt met de derde reeks.
In binaire termen, 1
is “aan” en 0
is uit". De MAKE_SET()
functie retourneert alleen strings met een corresponderende 1
in hun binaire waarde. Daarom retourneert ons voorbeeld hierboven de derde string.
Hier is nog een voorbeeld met een andere waarde:
SELECT MAKE_SET(10, 'a','b','c','d');
Resultaat:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
In dit geval is de binaire waarde 1010
. Het heeft dus twee 1
s, die overeenkomen met de tweede en vierde tekenreeksargumenten.
Hier zijn nog enkele voorbeelden om het concept verder te demonstreren:
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';
Resultaat (met verticale uitvoer):
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
Hier is een voorbeeld waarbij een andere reeks snaren wordt gebruikt:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Resultaat (met verticale uitvoer):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Meerdere binaire waarden
Gebruik een pijpsymbool (|
) om meer dan één waarde in de set op te nemen:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Resultaat:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Null-waarden
Als een tekenreekswaarde null
. is , dan wordt het weggelaten uit het resultaat:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Resultaat:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+