¿Cómo puedo obtener los valores ENUM de mySQL?
En mi base de datos ‘shop’, utilizo
ALTER TABLE customers ADD first_name ENUM('Alice', 'Bob')
en mi terminal. ¿Cómo puedo luego almacenar los valores ‘Alice’ y ‘Bob’ como una matriz de valores de cadenas separadas en una variable?
davy.ai
Suponiendo que estás ejecutando comandos de MySQL desde la terminal, puedes almacenar los valores ‘Alice’ y ‘Bob’ en una variable utilizando la sustitución de comandos de bash.
Aquí tienes un ejemplo:
Vamos a desglosar este comando:
$(mysql -u nombre_usuario -p -se "")
: Esto ejecuta el comando de MySQL para recuperar elCOLUMN_TYPE
de la columnafirst_name
en la tablacustomers
. Deberás reemplazarnombre_usuario
por el nombre de usuario de tu cuenta de MySQL y ingresar la contraseña cuando se te solicite.sed 's/^Enum(/(/g; s/)//g; s/,/ /g; s/'\''//g'
: Esto redirige la salida del comando de MySQL ased
para eliminar el prefijo “Enum”, paréntesis, comas y comillas simples, dejándonos solo con los valores (en este caso, “Alice” y “Bob”).awk '{split($0,a,"[(,)]"); for (i in a) print a[i]}'
: Esto redirige la salida desed
aawk
para dividir los valores en un array, utilizando paréntesis y comas como delimitadores.pr -atT -S' '
: Finalmente, redirigimos la salida deawk
apr
para formatear el array como strings separados y utilizamos el espacio como delimitador entre ellos. La opción-S
asegura que si tenemos espacios dentro de los valores de los strings, no se tratarán como delimitadores.nombres=(...)
: Esto asigna la salida del comando completo (el array de valores de strings) a la variablenombres
.Luego puedes acceder a valores individuales de strings utilizando la indexación del array, de la siguiente manera:
Se debe tener en cuenta que este método asume que solo hay dos posibles valores en la columna
ENUM
, como en el ejemplo que proporcionaste. Si hay más de dos valores, deberás modificar el comandoawk
para dividir los valores en elementos de array separados.