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:
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 );
?>
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!
Gracias, muchas gracias
GRACIAS MEN
Gracias muy buena ayuda
disculpa pero no se puede quedar la concatenacion en una sola columna en mi base de datos
Esta consulta está genial !!! Me ayudo mucho y evito una quebrada de cabeza.
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…
select nombre, apellido, concat_ws(‘ , ‘, nombre, apellidos) as nombre_completo FROM personas into table persona2
Muy bien, buena aportacion.. Gracias
me salvaste la vida je!.. muy bueno, me salio de 10…gracias
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%’;
interesante ..