Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Funktionsweise der Funktion MAKE_SET() in MySQL

In MySQL das MAKE_SET() Die Funktion gibt einen festgelegten Wert zurück (eine Zeichenfolge, die durch , getrennte Teilzeichenfolgen enthält Zeichen), bestehend aus den beim Aufruf der Funktion als Argumente angegebenen Zeichen.

Wenn Sie die Funktion aufrufen, geben Sie eine beliebige Anzahl von Zeichenfolgen (durch ein Komma getrennt) sowie einen oder mehrere Bitwerte an, die bestimmen, welche Zeichenfolgen im festgelegten Wert zurückgegeben werden sollen.

Syntax

Die Syntax lautet wie folgt:

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

Beispiel

Hier ist ein einfaches Beispiel:

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

Ergebnis:

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

Dieses Ergebnis mag zunächst offensichtlich erscheinen. Schließlich ist unser erstes Argument 1 , und die Funktion gibt die erste Zeichenfolge zurück.

Allerdings funktioniert das nicht ganz so.

Hier ist ein weiteres Beispiel.

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

Ergebnis:

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

Beachten Sie, dass die dritte Zeichenfolge zurückgegeben wurde, obwohl wir 4 angegeben haben als erstes Argument?

Das liegt daran, dass MAKE_SET() Funktion verwendet die binäre Darstellung des ersten Arguments, um die anwendbaren Zeichenfolgen in den nachfolgenden Argumenten zurückzugeben.

Sehen Sie sich das folgende Codebeispiel an, um zu sehen, was ich meine:

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:

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

Ergebnis:

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

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

Und hier ist ein Beispiel mit einem anderen Satz von Strings:

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

Ergebnis:

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

Mehrere Binärwerte

Sie können eine Pipe verwenden, um mehrere Binärwerte im ersten Argument zu übergeben:

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

Ergebnis:

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

Beachten Sie, dass Sie dasselbe Ergebnis erhalten, wenn Sie die Binärwerte im ersten Argument umkehren:

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

Ergebnis:

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

NULL-Werte

Alle Zeichenfolgen mit NULL-Werten werden nicht an das Ergebnis angehängt.

Beispiel:

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

Ergebnis:

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