UNIR 2 COLUMNAS Y BUSCAR EN MYSQL

Me pase intentando una consulta y no lo 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;

devolveria: ROY ANDERSON COTRINA VILLANUEVA

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:

devolveria: ROY ANDERSON ,COTRINA VILLANUEVA

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 y mostraría el nombre completo de la persona.

para mas informacion: Documentacion de MYSQL

Comentarios

  1. Muy bueno no conocia esa función, igual le agregue los campos invertidos para poder buscar por nombre y apellido o apellido y nombre.

    SELECT concat_ws(‘ ‘, nombre, apellidos) as persona FROM personas WHERE (concat_ws(‘ ‘, nombre, apellidos) LIKE ‘%cadena%’ or concat_ws(‘ ‘, apellidos, nopmbre) LIKE ‘%cadena%’)

    ResponderEliminar
  2. Muchas Gracias por el dato; quería comentar que también sirve con la función CONCAT quedo de la siguiente manera:

    SELECT CONCAT(nombre1,' ',apellido1) AS nombre FROM personas WHERE CONCAT(nombre1,' ',apellido1) LIKE '%cadena%' ORDER BY nombre;

    ResponderEliminar
  3. Si tengo un numero "X" de campod de una misma tabla, en las cuales se desea realizar una vista donde se desea concatenar dos o mas campos de la misma tabla pero que muestre los demás campos como se debería ejecutar el código, ejemplo:

    ------------------------------------
    tabla personas
    ------------------------------------
    tipo_doc varchar(45)
    nombre_1 varchar(45)
    nombre_2 varchar(45)
    apellido_1 varchar(45)
    apellido_2 varchar(45)
    direccion varchar(45)
    telefono varchar(45)

    Select tipo_doc as 'Tipo Documento',
    concat_sw(' ',nombre_1, nombre_2) as 'Nombres',
    concat_sw(' ',apellido_1, apellido_2) as 'Apellidos',
    direccion as 'Dirección Persona',
    telefono as 'Teléfono Contacto'
    from personas;

    Al ejecutar esto no muestra nada y obviamente sale error, cual sería la solución o el código que debería funcionar??

    Quedo atento.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable

Creacion, modificacion y eliminacion de usuarios en linux