En MariaDB, MAKE_SET()
es una función de cadena que devuelve un valor establecido, basado en los valores proporcionados en sus argumentos.
Un conjunto es una cadena que contiene subcadenas separadas por comas (,
) caracteres.
Sintaxis
La sintaxis es así:
MAKE_SET(bits,str1,str2,...)
Donde str1, str2,...
es uno o más valores de cadena y bits
especifica cuál de esos valores de cadena incluir en el conjunto.
MAKE_SET()
devuelve un valor establecido que consiste en las cadenas que tienen el bit correspondiente en bits
colocar.
Ejemplo
Aquí hay un ejemplo para demostrarlo:
SELECT MAKE_SET( 1, 'a', 'b', 'c', 'd' );
Resultado:
+-----------------------------------+ | MAKE_SET( 1, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | a | +-----------------------------------+
Tenga en cuenta que utiliza la representación binaria del primer argumento para devolver las cadenas aplicables en los argumentos posteriores. Por lo tanto, no es tan simple como decir que el primer argumento fue 1 y que correspondía al elemento 1.
Aquí hay otro ejemplo que ilustra lo que quiero decir:
SELECT MAKE_SET( 4, 'a', 'b', 'c', 'd' );
Resultado:
+-----------------------------------+ | MAKE_SET( 4, 'a', 'b', 'c', 'd' ) | +-----------------------------------+ | c | +-----------------------------------+
Cómo funciona
Considere lo siguiente:
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 salida vertical):
1: 1 2: 10 3: 11 4: 100 5: 101 6: 110 7: 111 8: 1000 9: 1001 10: 1010
Aquí, uso el BIN()
función para devolver el valor binario de cada número.
Podemos ver que la representación binaria de 4
es 100
. Necesitamos visualizar esto al revés para aplicarlo a nuestro MAKE_SET()
ejemplo anterior. En nuestro caso, este es un valor binario de tres dígitos, con el dígito más a la derecha correspondiente a la primera cadena, el siguiente dígito corresponde a la segunda cadena y el dígito más a la izquierda corresponde a la tercera cadena.
En términos binarios, 1
está "activado" y 0
esta apagado". El MAKE_SET()
la función solo devuelve cadenas que tienen un 1
correspondiente en su valor binario. Por lo tanto, nuestro ejemplo anterior devuelve la tercera cadena.
Aquí hay otro ejemplo usando un valor diferente:
SELECT MAKE_SET(10, 'a','b','c','d');
Resultado:
+-------------------------------+ | MAKE_SET(10, 'a','b','c','d') | +-------------------------------+ | b,d | +-------------------------------+
En este caso, el valor binario es 1010
. Por lo tanto, tiene dos 1
s, que corresponden a los argumentos de la segunda y cuarta cadena.
Aquí hay algunos ejemplos más para demostrar aún más el concepto:
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 salida 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
Aquí hay un ejemplo usando un conjunto diferente de cadenas:
SELECT MAKE_SET(3, 'Cat','Bat','Rat');
Resultado (usando salida vertical):
+--------------------------------+ | MAKE_SET(3, 'Cat','Bat','Rat') | +--------------------------------+ | Cat,Bat | +--------------------------------+
Valores binarios múltiples
Use un símbolo de tubería (|
) para incluir más de un valor en el conjunto:
SELECT MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' );
Resultado:
+----------------------------------------+ | MAKE_SET( 1 | 4, 'Cat', 'Bat', 'Rat' ) | +----------------------------------------+ | Cat,Rat | +----------------------------------------+
Valores nulos
Si un valor de cadena es null
, entonces se omite del resultado:
SELECT MAKE_SET( 1 | 3, 'Cat', null, 'Rat' );
Resultado:
+---------------------------------------+ | MAKE_SET( 1 | 3, 'Cat', null, 'Rat' ) | +---------------------------------------+ | Cat | +---------------------------------------+