• Retrointernet
Retrointernet
Mysql: Diferencias entre CONCAT y CONCAT_WS

Mysql: Diferencias entre CONCAT y CONCAT_WS

  • 17 de diciembre de 2018

Vamos a explicar las diferencias entre CONCAT y CONCAT_WS de Mysql. Lo primero de todo, ambas funciones concatenan cadenas o campos.

Tomemos una tabla con las publicaciones del blog y, por lo tanto, con los campos de identificación, título y contenido. Una búsqueda clásica buscará una palabra clave en el título y en el contenido del artículo. Para realizar la búsqueda lo más común es utilizar el condicional OR, es decir, selecciona los registros que tengan la palabra clave en el título o en el contenido. Por ejemplo:

SELECT * FROM articulos WHERE titulo LIKE "%palabra%" OR contenido LIKE "%palabra%";

Otra posibilidad es utilizar la función de concatenar CONCAT (pone un campo detrás de otro) con el título y el contenido, ¡no está mal también! Ejemplo:

SELECT * FROM articulos WHERE CONCAT(titulo, contenido) LIKE "%palabra%";

Podemos concatenar tantos campos como queramos. Sin embargo, un pequeño detalle, si uno de estos campos es NULL el resultado devuelto es NULL. Esto implica que no se recuperará un artículo sin título cuyo contenido coincida con la palabra clave.

Para evitar esto, debemos usar CONCAT_WS que funciona de la misma manera y ya no tendremos que preocuparnos de los campos vacíos.

El segundo ejemplo a continuación es menos comprensible, pero ilustra lo que acabamos de hablar y explica el beneficio de usar CONCAT en lugar de OR en algunos casos.

SELECT * FROM articulos WHERE CONCAT_WS(fecha, " ", hora, "h", minutos) LIKE "15/12/2018 22h35";

Por supuesto, es posible usar el comando REGEXP en lugar de LIKE. En definitiva, ¡viva la concatenación!

Vídeo relacionado