> Faqs > Cómo concatenar dos valores en una consulta SQL con MySQL

Cómo concatenar dos valores en una consulta SQL con MySQL

Quiero hacer que los emails de una tabla de usuario se compongan del identificador del usuario y luego la cadena "@example.com". Para eso tendría que concatenar dos valores en una cadena dentro del SQL y no sé si es posible.

Por ejemplo el email sería 1@example.com, 2@example.com y así todo.

La idea es resetear los emails de los usuarios que tengo en una tabla en local, para que no sean los verdaderos de la tabla en remoto y evitar posibles problemas de privacidad o de que se generen mensajes o cosas parecidas que les lleguen a los usuarios reales. He intentado ponerles a todos el mismo email, pero no me deja porque tiene que ser único, por eso he pensado en concatenar con el identificador de la fila, que es único. No sé si a alguien se le ocurre otra cosa que se pueda hacer.

Respuestas

En MySQL existe la funcion concat() que permite concatenar varios parámetros y te devuelve la concatenación de todos los parámetros que le pases.

Por ejemplo puedes hacer esto:

concat('hola', ' a ', 'todos')

Te devolvería la cadena con los tres valores concatenados, es decir 'hola a todos'. Como ves, puedes enviarle un número variable de parámetros a la función y te los concatena todos.

Para lo que necesitas la podrías usar más o menos así:

update users set email = concat(id, '@example.com') where 1;

En el ejemplo anterio, el identificador del usuario se supone que es el campo "id". De este modo, cada usuario tendrá su identificador como correo seguido de '@example.com'.

Esta función también está disponible en MariaDB. No sé si en otros motores de bases de datos la tendrás.

Miguel Angel
3280 145 214 17

Para lo que necesitas sería simplemente usar la función CONCAT() de MySQL. La puedes usar para concatenar dos o más expresiones de tipo cadena, que pueden venir tanto de literales escritos en el código de la consulta, entre comillas como de campos de los registros que estás consultando o actualizando.

Un ejemplo con literales lo tenes aquí:

SELECT CONCAT('Me gusta ', 'MySQL');

Un ejemplo de uso con campos del registro lo puedes ver aquí:

SELECT CONCAT(nombre_usuario, ' ', apellido_usuario) AS 'nombre_completo_usuario' FROM usuarios;

Esta consulta SQL te devolverá el nombre y apellido de todos los usuarios en un campo que has creado al vuelo que se llama 'nombre_completo_usuario'. Además esos valores los tienes separados por un espacio.

Tienes también la función CONCAT_WS que permite separar los valores concatenados con un separador. El primer parámetro es el separador.

SELECT CONCAT_WS(',','A','B','C');

Eso te devolverá la cadena 'A,B,C'.

Victor
300 8 21 16