2012-04-25 19 views
14

En mi SQL, estoy usando las cláusulas WHERE y LIKE para realizar una búsqueda. Sin embargo, necesito para realizar la búsqueda en un valor combinado de las dos columnas - first_name y last_name:Combinar dos columnas en SQL para la cláusula WHERE

WHERE customers.first_name + customers.last_name LIKE '%John Smith%'

Esto no funciona, pero me preguntaba cómo podía hacer algo en este sentido?

He tratado de hacer separar la búsqueda de las dos columnas, así:

WHERE customers.first_name LIKE '%John Smith%' OR customers.last_name LIKE '%John Smith%'

Pero obviamente eso no va a funcionar, porque la consulta de búsqueda es el valor combinado de estas dos columnas.

Respuesta

20

Usar la siguiente:

WHERE CONCAT(customers.first_name, ' ', customers.last_name) LIKE '%John Smith%' 

Nota que para que esto funcione como se pretende, nombre y apellido deben recortarse, es decir, no deben contener espacios en blanco iniciales o finales. Es mejor cortar cadenas en PHP, antes de insertar en la base de datos. Pero también se puede incorporar el recorte en su consulta como esta:

WHERE CONCAT(TRIM(customers.first_name), ' ', TRIM(customers.last_name)) LIKE '%John Smith%' 
2

Me gustaría empezar con algo como esto:

WHERE customers.first_name LIKE 'John%' AND customers.last_name LIKE 'Smith%' 

Esto devolver resultados como: John Smith, Johnny Smithy, Johnson Smithison, debido a que el signo de porcentaje está solo al final de la cláusula LIKE. A diferencia de '%John%' que podría devolver resultados como: aaaaJohnaaaa, aaaSmithaaa.

+0

Esto debería ser más eficiente que la ejecución de un concat primero y luego comparar. –