In MariaDB, MAKE_SET()
è una funzione stringa che restituisce un valore impostato, basato sui valori forniti nei suoi argomenti.
Un set è una stringa contenente sottostringhe separate da virgole (,
) caratteri.
Sintassi
La sintassi è questa:
MAKE_SET(bits,str1,str2,...)
Dove str1, str2,...
è uno o più valori stringa e bits
specifica quale di questi valori di stringa includere nel set.
MAKE_SET()
restituisce un valore impostato costituito dalle stringhe che hanno il bit corrispondente in bits
impostare.
Esempio
Ecco un esempio da dimostrare:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Risultato:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Nota che usa la rappresentazione binaria del primo argomento per restituire le stringhe applicabili negli argomenti successivi. Pertanto, non è così semplice come dire, il primo argomento era 1 e quindi corrispondeva al punto 1.
Ecco un altro esempio che illustra cosa intendo:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Risultato:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Come funziona
Considera quanto segue:
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';
Risultato (usando l'output verticale):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
Qui uso il BIN()
funzione per restituire il valore binario di ogni numero.
Possiamo vedere che la rappresentazione binaria di 4
è 100
. Dobbiamo visualizzarlo al contrario per applicarlo al nostro MAKE_SET()
esempio sopra. Nel nostro caso, questo è un valore binario a tre cifre, con la cifra più a destra corrispondente alla prima stringa, la cifra successiva corrisponde alla seconda stringa e la cifra più a sinistra corrisponde alla terza stringa.
In termini binari, 1
è "on" e 0
è spento". Il MAKE_SET()
la funzione restituisce solo stringhe che hanno un 1
corrispondente nel loro valore binario. Pertanto, il nostro esempio sopra restituisce la terza stringa.
Ecco un altro esempio che utilizza un valore diverso:
SELECT MAKE_SET(10, 'a','b','c','d');
Risultato:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
In questo caso, il valore binario è 1010
. Ha quindi due 1
s, che corrispondono al secondo e al quarto argomento della stringa.
Ecco altri esempi per dimostrare ulteriormente il concetto:
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';
Risultato (usando l'output verticale):
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
Ecco un esempio che utilizza un diverso insieme di stringhe:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Risultato (usando l'output verticale):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Valori binari multipli
Usa un simbolo pipe (|
) per includere più di un valore nell'insieme:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Risultato:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Valori Nulli
Se un valore di stringa è null
, quindi viene omesso dal risultato:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Risultato:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+