I MariaDB, MAKE_SET()
er en strengfunktion, der returnerer en indstillet værdi baseret på værdierne i dens argumenter.
Et sæt er en streng, der indeholder understrenge adskilt af komma (,
) tegn.
Syntaks
Syntaksen ser sådan ud:
MAKE_SET(bits,str1,str2,...)
Hvor str1, str2,...
er en eller flere strengværdier og bits
angiver, hvilke af disse strengværdier, der skal inkluderes i sættet.
MAKE_SET()
returnerer en indstillet værdi bestående af de strenge, der har den tilsvarende bit i bits
sæt.
Eksempel
Her er et eksempel til demonstration:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Resultat:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Bemærk, at den bruger den binære repræsentation af det første argument for at returnere de gældende strenge i de efterfølgende argumenter. Derfor er det ikke så enkelt som at sige, at det første argument var 1, og det svarede til punkt 1.
Her er et andet eksempel, der illustrerer, hvad jeg mener:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Resultat:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Sådan virker det
Overvej følgende:
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 (ved hjælp af lodret output):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 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');
Resultat:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | 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 (ved hjælp af lodret output):
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
Her er et eksempel med et andet sæt strenge:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Resultat (ved hjælp af lodret output):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Flere binære værdier
Brug et rørsymbol (|
) for at inkludere mere end én værdi i sættet:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Resultat:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Nul-værdier
Hvis en strengværdi er null
, så er det udeladt fra resultatet:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Resultat:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+