MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment MAKE_SET() fonctionne dans MariaDB

Dans MariaDB, MAKE_SET() est une fonction de chaîne qui renvoie une valeur définie, basée sur les valeurs fournies dans ses arguments.

Un ensemble est une chaîne contenant des sous-chaînes séparées par des virgules (, ) caractères.

Syntaxe

La syntaxe ressemble à ceci :

MAKE_SET(bits,str1,str2,...)

str1, str2,... est une ou plusieurs valeurs de chaîne et bits spécifie laquelle de ces valeurs de chaîne à inclure dans l'ensemble.

MAKE_SET() renvoie une valeur définie composée des chaînes qui ont le bit correspondant dans bits Positionner.

Exemple

Voici un exemple pour illustrer :

SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );

Résultat :

+-----------------------------------+
| MAKE_SET( 1, 'a', 'b', 'c', 'd' ) |
+-----------------------------------+
| a                                 |
+-----------------------------------+

Notez qu'il utilise la représentation binaire du premier argument pour renvoyer les chaînes applicables dans les arguments suivants. Par conséquent, ce n'est pas aussi simple que de dire, le premier argument était 1 et donc cela correspondait à l'élément 1.

Voici un autre exemple qui illustre ce que je veux dire :

SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );

Résultat :

+-----------------------------------+
| MAKE_SET( 4, 'a', 'b', 'c', 'd' ) |
+-----------------------------------+
| c                                 |
+-----------------------------------+

Comment ça marche

Considérez ce qui suit :

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';

Résultat (en utilisant la sortie verticale) :

 1: 1
 2: 10
 3: 11
 4: 100
 5: 101
 6: 110
 7: 111
 8: 1000
 9: 1001
10: 1010

Ici, j'utilise le BIN() fonction pour renvoyer la valeur binaire de chaque nombre.

Nous pouvons voir que la représentation binaire de 4 est 100 . Nous devons visualiser cela à l'envers afin de l'appliquer à notre MAKE_SET() exemple ci-dessus. Dans notre cas, il s'agit d'une valeur binaire à trois chiffres, le chiffre le plus à droite correspondant à la première chaîne, le chiffre suivant correspondant à la deuxième chaîne et le chiffre le plus à gauche correspondant à la troisième chaîne.

En termes binaires, 1 est "activé" et 0 est éteint". Le MAKE_SET() la fonction ne renvoie que les chaînes qui ont un 1 correspondant dans leur valeur binaire. Par conséquent, notre exemple ci-dessus renvoie la troisième chaîne.

Voici un autre exemple utilisant une valeur différente :

SELECT MAKE_SET(10, 'a','b','c','d');

Résultat :

+-------------------------------+
| MAKE_SET(10, 'a','b','c','d') |
+-------------------------------+
| b,d                           |
+-------------------------------+

Dans ce cas, la valeur binaire est 1010 . Il a donc deux 1 s, qui correspondent aux deuxième et quatrième arguments de chaîne.

Voici quelques exemples supplémentaires pour illustrer davantage le concept :

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';

Résultat (en utilisant la sortie 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

Voici un exemple utilisant un ensemble de chaînes différent :

SELECT MAKE_SET(3, 'Cat','Bat','Rat');

Résultat (en utilisant la sortie verticale) :

+--------------------------------+
| MAKE_SET(3, 'Cat','Bat','Rat') |
+--------------------------------+
| Cat,Bat                        |
+--------------------------------+

Plusieurs valeurs binaires

Utilisez un symbole pipe (| ) pour inclure plusieurs valeurs dans l'ensemble :

SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );

Résultat :

+----------------------------------------+
| MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) |
+----------------------------------------+
| Cat,Rat                                |
+----------------------------------------+

Valeurs nulles

Si une valeur de chaîne est null , alors il est omis du résultat :

SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );

Résultat :

+---------------------------------------+
| MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) |
+---------------------------------------+
| Cat                                   |
+---------------------------------------+