Saltar al contenido

Mentoring

LIKE en MySQL: cómo buscar patrones

Aprende a usar LIKE en MySQL con los comodines % y _ para buscar textos que empiezan, terminan o contienen una cadena.

Mentoring 3 min de lectura

Actualizado el

LIKE en MySQL

LIKE en MySQL sirve para buscar texto que coincide con un patrón. Se usa normalmente dentro de WHERE; la estructura completa de la consulta se explica en SELECT en MySQL.

Sintaxis básica

SELECT columnas
FROM tabla
WHERE columna LIKE 'patron';

Ejemplo:

SELECT *
FROM clientes
WHERE nombre LIKE 'A%';

Esta consulta devuelve los clientes cuyo nombre empieza por A.

Comodines de LIKE

Los comodines más usados son:

ComodínSignificado
%Cero o más caracteres.
_Un único carácter.

Ejemplos:

PatrónResultado
LIKE 'A%'Empieza por A.
LIKE '%a'Termina por a.
LIKE '%gmail%'Contiene gmail.
LIKE '_na'Tiene tres caracteres y termina en na.
LIKE 'A__%'Empieza por A y tiene al menos tres caracteres.

Buscar textos que empiezan por una letra

SELECT *
FROM clientes
WHERE nombre LIKE 'L%';

Devuelve nombres como Luis o Laura.

Buscar textos que terminan por una cadena

SELECT *
FROM clientes
WHERE apellido LIKE '%ez';

Devuelve apellidos como Pérez, López o Sánchez.

Buscar textos que contienen una cadena

SELECT *
FROM clientes
WHERE email LIKE '%hotmail%';

Devuelve emails que contienen hotmail en cualquier posición.

Buscar por posición con _

SELECT *
FROM clientes
WHERE telefono LIKE '___5%';

El patrón indica que el cuarto carácter debe ser 5.

Negar el patrón con NOT LIKE

NOT LIKE devuelve las filas que no coinciden con el patrón:

SELECT *
FROM clientes
WHERE email NOT LIKE '%@empresa.com';

NULL NOT LIKE ... no resulta verdadero, así que las filas con NULL en esa columna quedan fuera del resultado. Para incluirlas, añade la comprobación explícita:

SELECT *
FROM clientes
WHERE email NOT LIKE '%@empresa.com'
   OR email IS NULL;

Buscar % o _ literales

Para buscar el carácter % o _ como texto literal, declara un carácter de escape con ESCAPE:

SELECT *
FROM productos
WHERE codigo LIKE '%!%%' ESCAPE '!';

SELECT *
FROM productos
WHERE codigo LIKE '%!_%' ESCAPE '!';

Con ESCAPE '!', las secuencias !% y !_ representan los caracteres literales % y _, no los comodines.

Mayúsculas, minúsculas y acentos

La comparación de LIKE depende de la collation efectiva. Con la collation predeterminada moderna, utf8mb4_0900_ai_ci, la búsqueda no distingue mayúsculas de minúsculas ni acentos. No des por hecho que LIKE es siempre insensible a mayúsculas: si alguna de las expresiones usa una collation sensible, el resultado cambia.

Las collations terminadas en _ci no distinguen mayúsculas y las terminadas en _cs sí; _ai indica que no distinguen acentos y _as, que sí. Por ejemplo, en MySQL 8.0 o posterior:

SELECT 'abc' LIKE _utf8mb4 'ABC' COLLATE utf8mb4_0900_as_cs;

Devuelve 0 porque esa collation distingue mayúsculas. El charset debe ser compatible y las collations disponibles dependen de la versión del servidor. utf8mb4_0900_as_cs es un ejemplo para utf8mb4, no una recomendación universal; puedes comprobar las disponibles con:

SHOW COLLATION WHERE Charset = 'utf8mb4';

Rendimiento de LIKE

Un patrón constante que no empieza por comodín, como 'Ana%', puede aprovechar un índice B-tree. En cambio, LIKE '%texto' y LIKE '%texto%' no pueden usar ese índice para localizar el inicio del rango, por lo que suelen ser más lentos en tablas grandes.

Para evaluar estas búsquedas, consulta la guía de índices en MySQL.

Si necesitas buscar por términos en tablas grandes, MySQL ofrece los índices FULLTEXT como alternativa; no cubren todos los usos de LIKE.