V MariaDB, MAKE_SET()
je řetězcová funkce, která vrací nastavenou hodnotu na základě hodnot uvedených v jejích argumentech.
Sada je řetězec obsahující podřetězce oddělené čárkou (,
) znaky.
Syntaxe
Syntaxe vypadá takto:
MAKE_SET(bits,str1,str2,...)
Kde str1, str2,...
je jedna nebo více řetězcových hodnot a bits
určuje, které z těchto řetězcových hodnot se mají zahrnout do sady.
MAKE_SET()
vrací nastavenou hodnotu sestávající z řetězců, které mají odpovídající bit v bits
soubor.
Příklad
Zde je příklad k demonstraci:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Výsledek:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Všimněte si, že používá binární reprezentaci prvního argumentu, aby se v následujících argumentech vrátily použitelné řetězce. Není to tedy tak jednoduché, jako říct, že první argument byl 1 a tak to odpovídalo položce 1.
Zde je další příklad, který ilustruje, co tím myslím:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Výsledek:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Jak to funguje
Zvažte následující:
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 (při použití vertikálního výstupu):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 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');
Výsledek:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | 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 (při použití vertikálního výstupu):
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
Zde je příklad použití jiné sady řetězců:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Výsledek (při použití vertikálního výstupu):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Více binárních hodnot
Použijte symbol čáry (|
), chcete-li do sady zahrnout více než jednu hodnotu:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Výsledek:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Nulové hodnoty
Pokud je hodnota řetězce null
, pak je z výsledku vynechán:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Výsledek:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+