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

Fonctionnement de la fonction MAKE_SET() dans MySQL

Dans MySQL, le MAKE_SET() la fonction renvoie une valeur définie (une chaîne contenant des sous-chaînes séparées par , caractères) composé des caractères spécifiés comme arguments lorsque vous appelez la fonction.

Lorsque vous appelez la fonction, vous spécifiez un nombre quelconque de chaînes (séparées par une virgule), ainsi qu'une ou plusieurs valeurs binaires qui déterminent les chaînes à renvoyer dans la valeur définie.

Syntaxe

La syntaxe ressemble à ceci :

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

Exemple

Voici un exemple de base :

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

Résultat :

+--------+
| Result |
+--------+
| a      |
+--------+

Ce résultat peut sembler évident au premier abord. Après tout, notre premier argument est 1 , et la fonction renvoie la première chaîne.

Cependant, ce n'est pas tout à fait ainsi que cela fonctionne.

Voici un autre exemple.

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

Résultat :

+--------+
| Result |
+--------+
| c      |
+--------+

Notez qu'il a renvoyé la troisième chaîne, même si nous avons spécifié 4 comme premier argument ?

C'est parce que le MAKE_SET() la fonction utilise la représentation binaire du premier argument pour renvoyer les chaînes applicables dans les arguments suivants.

Regardez l'exemple de code suivant pour voir ce que je veux dire :

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 :

+------+------+------+------+------+------+------+------+------+------+
| 1    | 2    | 3    | 4    | 5    | 6    | 7    | 8    | 9    | 10   |
+------+------+------+------+------+------+------+------+------+------+
| 1    | 10   | 11   | 100  | 101  | 110  | 111  | 1000 | 1001 | 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') Result;

Résultat :

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

+---+---+-----+---+-----+-----+-------+---+-----+-----+
| 1 | 2 | 3   | 4 | 5   | 6   | 7     | 8 | 9   | 10  |
+---+---+-----+---+-----+-----+-------+---+-----+-----+
| a | b | a,b | c | a,c | b,c | a,b,c | d | a,d | b,d |
+---+---+-----+---+-----+-----+-------+---+-----+-----+

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

SELECT MAKE_SET(5, 'Cat','Dog','Horse','Duck') Result;

Résultat :

+-----------+
| Result    |
+-----------+
| Cat,Horse |
+-----------+

Plusieurs valeurs binaires

Vous pouvez utiliser un tube pour passer plusieurs valeurs binaires dans le premier argument :

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

Résultat :

+--------+
| Result |
+--------+
| a,c    |
+--------+

Notez que vous obtiendrez le même résultat si vous inversez les valeurs binaires dans le premier argument :

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

Résultat :

+--------+
| Result |
+--------+
| a,c    |
+--------+

Valeurs NULLES

Toutes les chaînes avec des valeurs NULL ne sont pas ajoutées au résultat.

Exemple :

SELECT MAKE_SET(1 | 4, 'a','b',NULL,'d') Result;

Résultat :

+--------+
| Result |
+--------+
| a      |
+--------+