MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona MAKE_SET() in MariaDB

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                                   |
+---------------------------------------+