es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    nombres=($(mysql -u nombre_usuario -p -se "SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_SCHEMA = 'shop' AND TABLE_NAME = 'customers' AND COLUMN_NAME = 'first_name';" | 
       sed 's/^Enum(/(/g; s/)//g; s/,/ /g; s/'\''//g' | 
       awk '{split($0,a,"[(,)]"); for (i in a) print a[i]}' | pr -atT -S' '))
    

    Vamos a desglosar este comando:

    1. $(mysql -u nombre_usuario -p -se ""): Esto ejecuta el comando de MySQL para recuperar el COLUMN_TYPE de la columna first_name en la tabla customers. Deberás reemplazar nombre_usuario por el nombre de usuario de tu cuenta de MySQL y ingresar la contraseña cuando se te solicite.
    2. sed 's/^Enum(/(/g; s/)//g; s/,/ /g; s/'\''//g': Esto redirige la salida del comando de MySQL a sed para eliminar el prefijo “Enum”, paréntesis, comas y comillas simples, dejándonos solo con los valores (en este caso, “Alice” y “Bob”).

    3. awk '{split($0,a,"[(,)]"); for (i in a) print a[i]}': Esto redirige la salida de sed a awk para dividir los valores en un array, utilizando paréntesis y comas como delimitadores.

    4. pr -atT -S' ': Finalmente, redirigimos la salida de awk a pr 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.

    5. nombres=(...): Esto asigna la salida del comando completo (el array de valores de strings) a la variable nombres.

    Luego puedes acceder a valores individuales de strings utilizando la indexación del array, de la siguiente manera:

    echo "${nombres[0]}"  # Salida: Alice
    echo "${nombres[1]}"  # Salida: Bob
    

    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 comando awk para dividir los valores en elementos de array separados.

Comments are closed.