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.4SELECT name, email FROM Users;
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
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:
Así, nuestra consulta para buscar a los usuarios del dominio «hotmail» puede quedar de esta forma:
MySQL 8.4SELECT name, email FROM Users WHERE email LIKE '%@hotmail.%'
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.4SELECT 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
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.4SELECT 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.