sql >> Database >  >> RDS >> Mysql

Hoe de functie MAKE_SET() werkt in MySQL

In MySQL is de MAKE_SET() functie retourneert een ingestelde waarde (een tekenreeks met subtekenreeksen gescheiden door , tekens) bestaande uit de tekens die zijn opgegeven als argumenten wanneer u de functie aanroept.

Wanneer u de functie aanroept, geeft u een willekeurig aantal tekenreeksen op (gescheiden door een komma), evenals een of meer bitwaarden die bepalen welke tekenreeksen moeten worden geretourneerd in de ingestelde waarde.

Syntaxis

De syntaxis gaat als volgt:

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

Voorbeeld

Hier is een eenvoudig voorbeeld:

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

Resultaat:

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

Dit resultaat lijkt in eerste instantie misschien voor de hand liggend. Ons eerste argument is immers 1 , en de functie retourneert de eerste tekenreeks.

Dat is echter niet helemaal hoe het werkt.

Hier is nog een voorbeeld.

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

Resultaat:

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

Merk op dat het de derde string retourneerde, ook al hadden we 4 specified gespecificeerd als het eerste argument?

Dit komt omdat de MAKE_SET() functie gebruikt de binaire representatie van het eerste argument om de toepasselijke strings in de volgende argumenten te retourneren.

Bekijk het volgende codevoorbeeld om te zien wat ik bedoel:

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:

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

Resultaat:

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

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

En hier is een voorbeeld met een andere reeks strings:

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

Resultaat:

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

Meerdere binaire waarden

U kunt een pijp gebruiken om meerdere binaire waarden in het eerste argument door te geven:

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

Resultaat:

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

Merk op dat u hetzelfde resultaat krijgt als u de binaire waarden in het eerste argument omkeert:

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

Resultaat:

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

NULL-waarden

Tekenreeksen met NULL-waarden worden niet aan het resultaat toegevoegd.

Voorbeeld:

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

Resultaat:

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


  1. IDEF1X Notatie

  2. SQL IN versus SQL BESTAAT

  3. hoe globale variabele declareren in SQL Server ..?

  4. Transacties uitvoeren tijdens het uitvoeren van een postgreql-functie