MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como MAKE_SET() funciona no MariaDB


No MariaDB, MAKE_SET() é uma função de string que retorna um valor definido, com base nos valores fornecidos em seus argumentos.

Um conjunto é uma string contendo substrings separadas por vírgula (, ) personagens.

Sintaxe


A sintaxe fica assim:
MAKE_SET(bits,str1,str2,...)

Onde str1, str2,... é um ou mais valores de string e bits especifica quais desses valores de string devem ser incluídos no conjunto.

MAKE_SET() retorna um valor definido que consiste nas strings que possuem o bit correspondente em bits definir.

Exemplo


Segue um exemplo para demonstrar:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );

Resultado:
+-----------------------------------+
| MAKE_SET( 1, 'a', 'b', 'c', 'd' ) |
+-----------------------------------+
| a                                 |
+-----------------------------------+

Observe que ele usa a representação binária do primeiro argumento para retornar as strings aplicáveis ​​nos argumentos subsequentes. Portanto, não é tão simples dizer, o primeiro argumento foi 1 e então correspondeu ao item 1.

Aqui está outro exemplo que ilustra o que quero dizer:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );

Resultado:
+-----------------------------------+
| MAKE_SET( 4, 'a', 'b', 'c', 'd' ) |
+-----------------------------------+
| c                                 |
+-----------------------------------+

Como funciona


Considere o seguinte:
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';

Resultado (usando saída vertical):
 1: 1
 2: 10
 3: 11
 4: 100
 5: 101
 6: 110
 7: 111
 8: 1000
 9: 1001
10: 1010

Aqui, eu uso o BIN() função para retornar o valor binário de cada número.

Podemos ver que a representação binária de 4 é 100 . Precisamos visualizar isso de trás para frente para aplicá-lo ao nosso MAKE_SET() exemplo acima. No nosso caso, este é um valor binário de três dígitos, com o dígito mais à direita correspondendo à primeira string, o próximo dígito corresponde à segunda string e o dígito mais à esquerda corresponde à terceira string.

Em termos binários, 1 está "ligado" e 0 está fora". O MAKE_SET() a função retorna apenas strings que possuem um 1 correspondente em seu valor binário. Portanto, nosso exemplo acima retorna a terceira string.

Aqui está outro exemplo usando um valor diferente:
SELECT MAKE_SET(10, 'a','b','c','d');

Resultado:
+-------------------------------+
| MAKE_SET(10, 'a','b','c','d') |
+-------------------------------+
| b,d                           |
+-------------------------------+

Neste caso, o valor binário é 1010 . Portanto, tem dois 1 s, que correspondem ao segundo e quarto argumentos de string.

Aqui estão mais alguns exemplos para demonstrar ainda mais o conceito:
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';

Resultado (usando saída vertical):
 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

Aqui está um exemplo usando um conjunto diferente de strings:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');

Resultado (usando saída vertical):
+--------------------------------+
| MAKE_SET(3, 'Cat','Bat','Rat') |
+--------------------------------+
| Cat,Bat                        |
+--------------------------------+

Vários valores binários


Use um símbolo de barra vertical (| ) para incluir mais de um valor no conjunto:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );

Resultado:
+----------------------------------------+
| MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) |
+----------------------------------------+
| Cat,Rat                                |
+----------------------------------------+

Valores nulos


Se um valor de string for null , então é omitido do resultado:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );

Resultado:
+---------------------------------------+
| MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) |
+---------------------------------------+
| Cat                                   |
+---------------------------------------+