Concatenar dos campos en MySQL

Hoy, estaba hablando con un compañero mío sobre una consulta que estaba intentando hacer y no conseguía de ninguna de las maneras.

Lo que quería hacer era juntar dos columnas o campos de una tabla de mysql para poder buscar una cadena en dichos campos. Por ejemplo: Pongámonos en el caso de que tenemos una tabla de personas y dos campos: uno para el nombre y otro para los apellidos y queremos buscar sobre esas personas sobre esos dos campos pero unificados y mostrarselos como un único campo, como lo haríamos?

Pues utilizando la función concat_ws de mysql. Está función permite concatenar dos o más campos para mostrarse como un único campo.

Veámos un ejemplo:

SELECT concat_ws(' ', nombre, apellidos) as persona FROM personas;

Esta consulta nos devolvería un único campo en el que se han juntado el nombre y los apellidos y utilizando el espacio como caracter de separación, en vez del espacio podemos utilizar cualquier carácter, por ejemplo:

SELECT concat_ws(' ,', nombre, apellidos) as persona FROM personas;

El resultado sería:

Esteban, García García

Si también queremos utilizar este campo concatenado dentro de WHERE tendremos que utilizar el concat_ws porqué WHERE no sabe que existe un campo concatenado, por lo que quedaría así:

SELECT concat_ws(' ', nombre, apellidos) as persona FROM personas WHERE concat_ws(' ', nombre, apellidos) LIKE '%cadena%';

Con el ejemplo anterior buscaría todas las personas que tuvieran la palabra <cadena> y mostraría el nombre completo de la persona.

Podéis encontrar más información en el siguiente enlace:

Concatenar campos en mysql

13 Respuestas

  1. JOE

    hola buenas quiero mostrar datos DE LAS COLUMAS pero de una FILA el codigo que tengo ES ESTE PERO MUESTRA TODA LA TABLA:

    // creación de la conexión a la base de datos con mysql_connect()
    $conexion = mysqli_connect( $servidor, $usuario, “!HKQ1fF2I!SH” ) or die (“No se ha podido conectar al servidor de Base de datos”);

    // Selección del a base de datos a utilizar
    $db = mysqli_select_db( $conexion, $basededatos ) or die ( “Upps! Pues va a ser que no se ha podido conectar a la base de datos” );
    // establecer y realizar consulta. guardamos en variable.
    $consulta = “SELECT * FROM wpal_participants_database”;
    $resultado = mysqli_query( $conexion, $consulta ) or die ( “Algo ha ido mal en la consulta a la base de datos”);

    // Motrar el resultado de los registro de la base de datos
    // Encabezado de la tabla
    echo “”;
    echo “”;
    echo “CURSO”;
    echo “NOMBRE”;
    echo “”;

    // Bucle while que recorre cada registro y muestra cada campo en la tabla.
    while ($columna = mysqli_fetch_array( $resultado ))
    {
    echo “”;
    echo “” . $columna[‘CURSO’] . “” . $columna[‘NOMBRE’] . “”;
    echo “”;
    }

    echo “”; // Fin de la tabla
    // cerrar conexión de base de datos
    mysqli_close( $conexion );
    ?>

  2. Buenas soy nuevo en Java, mysql y estoy haciendo un programa y lo que quiero es concatenar como se muestra aki lo cual si sale …pero resulta que mi tabla sql tiene 31 campos pero solo necesito 3 de ellos… nombres, apellidos y DNI; y mostrarlos en un jtable solo en 2 columnas(DNI | nombres y apellidos), la tabla carga bien solo que me carga DNI, nombres(no carga apellidos)

    Explico lo que tengo de codigo..
    Una clase datos donde se hacen las consultas sql, aquí tengo la consulta para el jtable del form..
    Public ResultSet getPersonal(){
    Try{
    String sql=”select * from personal”;
    PreparedStatenent pst = con.prepareStatement(sql);
    Return pat.excecutequery(sql);
    }catch(…){
    ……
    }
    }

    El form donde está el jtable tiene el código siguiente

    Private void llenarTabla(){
    String titulos []= {“dni”,”nombres y apellidos”};
    String registros [] =new String [2];
    miTabla = new DefaultTableModel (null, titulos);

    ResultSet rs= misDatos.getPersonal();

    While(rs.next()){
    registros[0]= “”+ rs.getInt(“dni”);
    registros[1]= rs.getstring(” “); // aquí en donde quiero que aparezca nombres y apellidos…
    }
    }

    Espero se entienda mi problema/consulta
    Nose como armar la consulta sql
    Desde ya muchas gracias!

  3. César Ruiz

    Gracias, muchas gracias

  4. ray

    GRACIAS MEN

  5. Cristobal

    Gracias muy buena ayuda

  6. gonzalo

    disculpa pero no se puede quedar la concatenacion en una sola columna en mi base de datos

  7. Victor Santillan

    Esta consulta está genial !!! Me ayudo mucho y evito una quebrada de cabeza.

  8. renato

    amigo y como seria tengo los campos nombre y apellido ambos con valores…. quisiera concatenar tanto el nombre y el apellido sobre otra columna de la misma tabla nombre_completo la cual esta vacia…

    • alberto

      select nombre, apellido, concat_ws(‘ , ‘, nombre, apellidos) as nombre_completo FROM personas into table persona2

  9. Raul

    Muy bien, buena aportacion.. Gracias

  10. rodrigo

    me salvaste la vida je!.. muy bueno, me salio de 10…gracias

  11. andrea

    excelente no sabes lo que tarde en buscar, era justo lo que necesitaba tengo dos campos los cuales son los apellidos y queria realizar una busqueda por ambos apellidos, quedo asi select nombres,apaterno,amaterno from tabla where concat(apaterno,’ ‘,amaterno) like ‘%GUTIERREZ AGUIRRE%’;

  12. kathy

    interesante ..