El operador LIKE

El operador LIKE se usa en las condiciones de una consulta cuando quieres saber si una cadena se ajusta a un patrón determinado.

Por ejemplo, tenemos la tabla Users, que tiene la columna email:

MySQL 8.4
SELECT name, email FROM Users;
nameemail
Bruce Willisbarjam@hotmail.com
George Clooneytellis@me.com
Kevin Costnermetzzo@hotmail.com
Samuel L. Jacksonmoonlapse@outlook.com
Kurt Russellgator@live.com

Supongamos que queremos encontrar a todos los usuarios cuyo correo está en el dominio de segundo nivel «hotmail». Es decir, hay que seleccionar solo los registros que cumplen esta condición:

  • después del símbolo «@» viene «hotmail»
  • después de «hotmail» viene el símbolo «.» y, a continuación, cualquier secuencia de caracteres

Para este tipo de búsquedas no triviales en columnas de texto existe precisamente el operador LIKE.

Sintaxis

MySQL 8.4
WHERE campo_tabla [NOT] LIKE patron_cadena
  • [ ]parte opcional
campo_tabla

La columna de texto cuyos valores se comparan con el patrón.

NOT

Invierte la condición: se quedan las filas que no se ajustan al patrón.

Palabra claveOpcional
patron_cadena

Una cadena entre comillas a la que debe parecerse el valor, por ejemplo '%@hotmail.%'.

El patrón puede incluir dos caracteres especiales: % y _. Esto es lo que significa cada uno:

%Cualquier secuencia de caracteres
Por ejemplo:
Muchos caracteres
…
1 carácter
0 caracteres
_Exactamente un carácter
1 carácter

Así, nuestra consulta para buscar a los usuarios del dominio «hotmail» puede quedar de esta forma:

MySQL 8.4
SELECT name, email FROM Users
WHERE email LIKE '%@hotmail.%'
nameemail
Bruce Willisbarjam@hotmail.com
Kevin Costnermetzzo@hotmail.com
Jennifer Lopezbarjam@hotmail.com
Harrison Fordkostas@hotmail.com
Michael Douglastimtroyr@hotmail.com
Catherine Zeta-Jonesflakeg@hotmail.com

Ejemplos

  • MySQL 8.4
    ... WHERE campo_tabla LIKE 'text%'
    

    Coincide con cualquier cadena que empiece por «text».

  • MySQL 8.4
    ... WHERE campo_tabla LIKE '%text'
    

    Coincide con cualquier cadena que termine en «text».

  • MySQL 8.4
    ... WHERE campo_tabla LIKE '_ext'
    

    Coincide con las cadenas de 4 caracteres cuyos 3 últimos sean obligatoriamente «ext». Por ejemplo, las palabras «text» y «next».

  • MySQL 8.4
    ... WHERE campo_tabla LIKE 'begin%end'
    

    Coincide con las cadenas que empiezan por «begin» y terminan en «end».

Escapar caracteres especiales

A veces necesitas encontrar cadenas en las que los caracteres % y _ forman parte del propio texto y no del patrón. En esos casos hay que escapar estos caracteres.

En los patrones de LIKE, el carácter de escape por defecto es \. Por ejemplo, si necesitas obtener los identificadores de las tareas cuyo progreso es 3%, puedes escribir:

MySQL 8.4
SELECT job_id FROM Jobs
WHERE progress LIKE '3\%';

Carácter ESCAPE

Si en lugar del carácter por defecto quieres usar otro carácter de escape, puedes indicarlo de forma explícita con ESCAPE.

Sintaxis con ESCAPE

MySQL 8.4
WHERE campo_tabla LIKE patron_cadena ESCAPE caracter_escape
campo_tabla

La columna de texto cuyos valores se comparan con el patrón.

patron_cadena

El patrón de búsqueda. El carácter de escape delante de % o _ los convierte en caracteres normales.

caracter_escape

Un único carácter que, en este patrón, escapa % y _ en lugar de \, por ejemplo '!'.

La misma consulta se puede escribir indicando explícitamente el carácter de escape:

MySQL 8.4
SELECT job_id FROM Jobs
WHERE progress LIKE '3!%' ESCAPE '!';

Aquí el carácter ! cumple la misma función que \ en el ejemplo anterior.

Ejercicio interactivo

¡Ahora vamos a afianzar lo aprendido con la práctica!
En el ejercicio de abajo tienes que repartir las direcciones de email entre los patrones LIKE, arrastrándolas a la zona que corresponda.

Ejercicio interactivo no disponible

Para este ejercicio interactivo necesitas una pantalla de al menos 600 píxeles de ancho. Prueba a abrir la página en un ordenador o una tableta.