sql >> Database teknologi >  >> RDS >> Mysql

Hvordan MAKE_SET()-funktionen virker i MySQL

I MySQL er MAKE_SET() funktion returnerer en indstillet værdi (en streng, der indeholder understrenge adskilt af , tegn) bestående af de tegn, der er angivet som argumenter, når du kalder funktionen.

Når du kalder funktionen, angiver du et hvilket som helst antal strenge (adskilt af et komma), samt en eller flere bitværdier, der bestemmer, hvilke strenge der skal returneres i den indstillede værdi.

Syntaks

Syntaksen ser sådan ud:

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

Eksempel

Her er et grundlæggende eksempel:

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

Resultat:

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

Dette resultat kan umiddelbart virke indlysende. Vores første argument er trods alt 1 , og funktionen returnerer den første streng.

Det er dog ikke helt sådan, det fungerer.

Her er endnu et eksempel.

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

Resultat:

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

Bemærk, at den returnerede den tredje streng, selvom vi specificerede 4 som det første argument?

Dette skyldes, at MAKE_SET() funktionen bruger den binære repræsentation af det første argument for at returnere de gældende strenge i de efterfølgende argumenter.

Se på følgende kodeeksempel for at se, hvad jeg mener:

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

Her bruger jeg BIN() funktion for at returnere hvert tals binære værdi.

Vi kan se, at den binære repræsentation af 4 er 100 . Vi er nødt til at visualisere dette baglæns for at anvende det på vores MAKE_SET() eksempel ovenfor. I vores tilfælde er dette en trecifret binær værdi, hvor cifferet længst til højre svarer til den første streng, det næste ciffer svarer til den anden streng, og cifferet længst til venstre svarer til den tredje streng.

I binære termer, 1 er "on" og 0 er "slukket". MAKE_SET() funktion returnerer kun strenge, der har en tilsvarende 1 i deres binære værdi. Derfor returnerer vores eksempel ovenfor den tredje streng.

Her er et andet eksempel med en anden værdi:

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

Resultat:

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

I dette tilfælde er den binære værdi 1010 . Den har derfor to 1 s, som svarer til det andet og det fjerde strengargument.

Her er nogle flere eksempler for at demonstrere konceptet yderligere:

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

Og her er et eksempel, der bruger et andet sæt strenge:

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

Resultat:

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

Flere binære værdier

Du kan bruge et rør til at sende flere binære værdier i det første argument:

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

Resultat:

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

Bemærk, at du får det samme resultat, hvis du vender de binære værdier i det første argument:

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

Resultat:

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

NULL-værdier

Eventuelle strenge med NULL-værdier føjes ikke til resultatet.

Eksempel:

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

Resultat:

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


  1. Rekursiv forespørgsel i Oracle

  2. Hvordan udtrækkes år og måned fra dato i PostgreSQL uden at bruge to_char()-funktionen?

  3. SQL Server-replikering kræver det faktiske servernavn for at oprette forbindelse til serveren

  4. Hvordan nulstiller jeg SqLite-databasen i Android?