sql >> Databasteknik >  >> RDS >> MariaDB

Hur MAKE_SET() fungerar i MariaDB

I MariaDB, MAKE_SET() är en strängfunktion som returnerar ett inställt värde, baserat på de värden som anges i dess argument.

En uppsättning är en sträng som innehåller delsträngar separerade med kommatecken (, ) tecken.

Syntax

Syntaxen ser ut så här:

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

Där str1, str2,... är ett eller flera strängvärden och bits anger vilka av dessa strängvärden som ska inkluderas i uppsättningen.

MAKE_SET() returnerar ett uppsättningsvärde som består av strängarna som har motsvarande bit i bits uppsättning.

Exempel

Här är ett exempel att visa:

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

Resultat:

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

Observera att den 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. Därför är det inte så enkelt som att säga, det första argumentet var 1 och så motsvarade det punkt 1.

Här är ett annat exempel som illustrerar vad jag menar:

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

Resultat:

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

Så fungerar det

Tänk på följande:

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 (med vertikal utdata):

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

Resultat:

+-------------------------------+
| MAKE_SET(10, 'a','b','c','d') |
+-------------------------------+
| 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 (med vertikal utdata):

 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

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

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

Resultat (med vertikal utdata):

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

Flera binära värden

Använd en rörsymbol (| ) för att inkludera mer än ett värde i uppsättningen:

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

Resultat:

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

Nullvärden

Om ett strängvärde är null , då utelämnas det från resultatet:

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

Resultat:

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

  1. SQL Server Användardefinierade funktioner

  2. Hitta sql-poster som innehåller liknande strängar

  3. pyodbc - mycket långsam bulkinserthastighet

  4. EF 6 - Hur man korrekt utför parallella frågor