MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie MAKE_SET() in MariaDB funktioniert

In MariaDB MAKE_SET() ist eine Zeichenfolgenfunktion, die basierend auf den in ihren Argumenten angegebenen Werten einen festgelegten Wert zurückgibt.

Eine Menge ist eine Zeichenfolge, die durch Komma getrennte Teilzeichenfolgen enthält (, ) Zeichen.

Syntax

Die Syntax lautet wie folgt:

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

Wobei str1, str2,... ist ein oder mehrere String-Werte und bits gibt an, welche dieser Zeichenfolgenwerte in den Satz aufgenommen werden sollen.

MAKE_SET() gibt einen gesetzten Wert zurück, der aus den Strings besteht, die das entsprechende Bit in bits haben einstellen.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

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

Ergebnis:

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

Beachten Sie, dass es die binäre Darstellung verwendet des ersten Arguments, um die anwendbaren Zeichenfolgen in den nachfolgenden Argumenten zurückzugeben. Daher ist es nicht so einfach zu sagen, das erste Argument war 1 und das entsprach Punkt 1.

Hier ist ein weiteres Beispiel, das veranschaulicht, was ich meine:

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

Ergebnis:

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

Wie es funktioniert

Beachten Sie Folgendes:

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

Ergebnis (bei vertikaler Ausgabe):

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

Hier verwende ich den BIN() Funktion, um den Binärwert jeder Zahl zurückzugeben.

Wir können sehen, dass die binäre Darstellung von 4 ist 100 . Wir müssen dies rückwärts visualisieren, um es auf unser MAKE_SET() anzuwenden Beispiel oben. In unserem Fall ist dies ein dreistelliger Binärwert, wobei die Ziffer ganz rechts der ersten Zeichenfolge entspricht, die nächste Ziffer der zweiten Zeichenfolge entspricht und die Ziffer ganz links der dritten Zeichenfolge entspricht.

Binär ausgedrückt, 1 ist „ein“ und 0 ist aus". Das MAKE_SET() Die Funktion gibt nur Strings zurück, die einen entsprechenden 1 haben in ihrem binären Wert. Daher gibt unser obiges Beispiel die dritte Zeichenfolge zurück.

Hier ist ein weiteres Beispiel mit einem anderen Wert:

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

Ergebnis:

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

In diesem Fall ist der Binärwert 1010 . Es hat also zwei 1 s, die dem zweiten und vierten String-Argument entsprechen.

Hier sind einige weitere Beispiele, um das Konzept weiter zu demonstrieren:

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

Ergebnis (bei vertikaler Ausgabe):

 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

Hier ist ein Beispiel mit einem anderen Satz von Zeichenfolgen:

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

Ergebnis (bei vertikaler Ausgabe):

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

Mehrere Binärwerte

Verwenden Sie ein Pipe-Symbol (| ), um mehr als einen Wert in den Satz aufzunehmen:

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

Ergebnis:

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

Nullwerte

Wenn ein Zeichenfolgenwert null ist , dann wird es aus dem Ergebnis weggelassen:

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

Ergebnis:

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