sql >> Databasteknik >  >> RDS >> Mysql

Hur MAKE_SET()-funktionen fungerar i MySQL

I MySQL, MAKE_SET() funktion returnerar ett uppsättningsvärde (en sträng som innehåller delsträngar separerade med , tecken) som består av de tecken som anges som argument när du anropar funktionen.

När du anropar funktionen anger du valfritt antal strängar (avgränsade med komma), samt ett eller flera bitvärden som avgör vilka strängar som ska returneras i det inställda värdet.

Syntax

Syntaxen ser ut så här:

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

Exempel

Här är ett grundläggande exempel:

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

Resultat:

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

Detta resultat kan tyckas uppenbart till en början. Vårt första argument är trots allt 1 , och funktionen returnerar den första strängen.

Det är dock inte riktigt så det fungerar.

Här är ett annat exempel.

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

Resultat:

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

Lägg märke till att den returnerade den tredje strängen, även om vi angav 4 som första argument?

Detta beror på att MAKE_SET() funktionen använder den binära representationen av det första argumentet för att returnera de tillämpliga strängarna i de efterföljande argumenten.

Titta på följande kodexempel för att se vad jag menar:

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

Resultat:

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

Här använder jag BIN() funktion för att returnera varje nummers binära värde.

Vi kan se att den binära representationen av 4 är 100 . Vi måste visualisera detta baklänges för att kunna tillämpa det på vår MAKE_SET() exemplet ovan. I vårt fall är detta ett tresiffrigt binärt värde, där siffran längst till höger motsvarar den första strängen, nästa siffra motsvarar den andra strängen och siffran längst till vänster motsvarar den tredje strängen.

I binära termer, 1 är "på" och 0 är av". MAKE_SET() funktion returnerar endast strängar som har en motsvarande 1 i deras binära värde. Därför returnerar vårt exempel ovan den tredje strängen.

Här är ett annat exempel med ett annat värde:

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

Resultat:

+--------+
| Result |
+--------+
| b,d    |
+--------+

I det här fallet är det binära värdet 1010 . Den har därför två 1 s, som motsvarar de andra och fjärde strängargumenten.

Här är några fler exempel för att demonstrera konceptet ytterligare:

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

Resultat:

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

Och här är ett exempel med en annan uppsättning strängar:

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

Resultat:

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

Flera binära värden

Du kan använda ett rör för att skicka flera binära värden i det första argumentet:

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

Resultat:

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

Observera att du får samma resultat om du vänder på de binära värdena i det första argumentet:

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

Resultat:

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

NULL-värden

Eventuella strängar med NULL-värden läggs inte till i resultatet.

Exempel:

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

Resultat:

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


  1. Använda MyRocks Storage Engine med MariaDB Server

  2. Sök med kommaseparerat värde mysql

  3. Hur man använder IF...THEN Logic i SQL Server

  4. Returnera en lista över database-postprofiler i SQL Server (T-SQL)