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
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
para mas informacion: Documentacion de MYSQL
Muy bueno no conocia esa función, igual le agregue los campos invertidos para poder buscar por nombre y apellido o apellido y nombre.
ResponderEliminarSELECT concat_ws(‘ ‘, nombre, apellidos) as persona FROM personas WHERE (concat_ws(‘ ‘, nombre, apellidos) LIKE ‘%cadena%’ or concat_ws(‘ ‘, apellidos, nopmbre) LIKE ‘%cadena%’)
Muchas Gracias por el dato; quería comentar que también sirve con la función CONCAT quedo de la siguiente manera:
ResponderEliminarSELECT CONCAT(nombre1,' ',apellido1) AS nombre FROM personas WHERE CONCAT(nombre1,' ',apellido1) LIKE '%cadena%' ORDER BY nombre;
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:
ResponderEliminar------------------------------------
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.