sql >> Databáze >  >> RDS >> Mysql

Jak funguje funkce MAKE_SET() v MySQL

V MySQL je to MAKE_SET() funkce vrací nastavenou hodnotu (řetězec obsahující podřetězce oddělené , znaků) skládající se ze znaků zadaných jako argumenty při volání funkce.

Když funkci zavoláte, zadáte libovolný počet řetězců (oddělených čárkou) a také jednu nebo více bitových hodnot, které určují, které řetězce se mají vrátit v nastavené hodnotě.

Syntaxe

Syntaxe vypadá takto:

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

Příklad

Zde je základní příklad:

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

Výsledek:

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

Tento výsledek se může na první pohled zdát jasný. Koneckonců, náš první argument je 1 a funkce vrátí první řetězec.

Takto to však úplně nefunguje.

Zde je další příklad.

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

Výsledek:

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

Všimněte si, že vrátil třetí řetězec, i když jsme zadali 4 jako první argument?

Je to proto, že MAKE_SET() funkce používá binární reprezentaci prvního argumentu pro vrácení použitelných řetězců v následujících argumentech.

Podívejte se na následující příklad kódu, abyste viděli, co tím myslím:

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

Výsledek:

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

Zde používám BIN() funkce, která vrátí binární hodnotu každého čísla.

Můžeme vidět, že binární reprezentace 4 je 100 . Abychom to mohli aplikovat na naši MAKE_SET(), musíme si to vizualizovat zpětně příklad výše. V našem případě se jedná o třímístnou binární hodnotu, přičemž číslice nejvíce vpravo odpovídá prvnímu řetězci, další číslice odpovídá druhému řetězci a číslice nejvíce vlevo odpovídá třetímu řetězci.

V binárním vyjádření 1 je „on“ a 0 je „vypnuto“. MAKE_SET() funkce vrací pouze řetězce, které mají odpovídající 1 v jejich binární hodnotě. Náš příklad výše proto vrací třetí řetězec.

Zde je další příklad s použitím jiné hodnoty:

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

Výsledek:

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

V tomto případě je binární hodnota 1010 . Má tedy dvě 1 s, které odpovídají druhému a čtvrtému argumentu řetězce.

Zde je několik dalších příkladů, které tento koncept dále demonstrují:

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

Výsledek:

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

A zde je příklad s použitím jiné sady řetězců:

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

Výsledek:

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

Více binárních hodnot

K předání více binárních hodnot v prvním argumentu můžete použít rouru:

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

Výsledek:

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

Všimněte si, že stejného výsledku získáte, pokud přehodíte binární hodnoty v prvním argumentu:

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

Výsledek:

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

Hodnoty NULL

Žádné řetězce s hodnotami NULL nejsou k výsledku připojeny.

Příklad:

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

Výsledek:

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


  1. MySQL ON DUPLICATE KEY UPDATE pro vložení více řádků do jednoho dotazu

  2. Co je s (nolock) na serveru SQL?

  3. Jak začít s SQLCipher pro Android?

  4. Jak vytvořit databázové tabulky pomocí SQL