Listado completo de tutoriales

32 - Búsqueda de patrones (regexp)


Ver video

Los operadores "regexp" y "not regexp" busca patrones de modo similar a "like" y "not like".

Para buscar libros que contengan la cadena "Ma" usamos:

 select titulo from libros
  where titulo regexp 'Ma';

Para buscar los autores que tienen al menos una "h" o una "k" o una "w" tipeamos:

 select autor from libros
  where autor regexp '[hkw]';

Para buscar los autores que no tienen ni "h" o una "k" o una "w" tipeamos:

 select autor from libros
  where autor not regexp '[hkw]';

Para buscar los autores que tienen por lo menos una de las letras de la "a" hasta la "d", es decir, "a,b,c,d", usamos:

 select autor from libros
  where autor regexp '[a-d]';

Para ver los títulos que comienzan con "A" tipeamos:

 select titulo from libros
  where titulo regexp '^A';

Para ver los títulos que terminan en "HP" usamos:

 select titulo from libros
  where titulo regexp 'HP$';

Para buscar títulos que contengan una "a" luego un caracter cualquiera y luego una "e" utilizamos la siguiente sentencia:

 select titulo from libros
  where titulo regexp 'a.e';

El punto (.) identifica cualquier caracter.

Podemos mostrar los títulos que contienen una "a" seguida de 2 caracteres y luego una "e":

 select titulo from libros
  where titulo regexp 'a..e';

Para buscar autores que tengan 6 caracteres exactamente usamos:

 select autor from libros
  where autor regexp '^......$';

Para buscar autores que tengan al menos 6 caracteres usamos:

 select autor from libros
  where autor regexp '......';

Para buscar títulos que contengan 2 letras "a" usamos:

 select titulo from libros
  where titulo regexp 'a.*a';

El asterisco indica que busque el caracter inmediatamente anterior, en este caso cualquiera porque hay un punto.

Servidor de MySQL instalado en forma local.

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL para utilizar patrones de búsqueda mediante ''regexp':

drop table if exists libros;

create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(40) not null,
  autor varchar(30),
  editorial varchar(15),
  precio decimal(5,2) unsigned,
  primary key(codigo)
 );

insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Planeta',15.50);
insert into libros (titulo,autor,editorial,precio)
  values('Martin Fierro','Jose Hernandez','Emece',22.90);
insert into libros (titulo,autor,editorial,precio)
  values('Antologia poetica','J.L. Borges','Planeta',39);
insert into libros (titulo,autor,editorial,precio)
  values('Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros (titulo,autor,editorial,precio)
  values('Cervantes y el quijote','Bioy Casare- J.L. Borges','Paidos',35.40);
insert into libros (titulo,autor,editorial,precio)
  values('Manual de PHP', 'J.C. Paez', 'Paidos',19);
insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00);
insert into libros (titulo,autor,editorial,precio)
  values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00);
insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',36.00);

-- Para buscar libros cuyos títulos contengan la cadena "Ma" usamos:
select titulo from libros
  where titulo regexp 'Ma';

-- Para buscar los registros cuyos autores tienen al menos una "h" o una "k" o una "w" tipeamos:
select titulo,autor from libros
  where autor regexp '[hkw]';

-- Para buscar los libros cuyos autores no tienen ni "h" o una "k" o una "w" tipeamos:
select titulo,autor from libros
  where autor not regexp '[hkw]';

-- Para buscar los autores que tienen por lo menos una de las letras de la "a"
-- hasta la "d", es decir, "a,b,c,d", usamos:
select autor from libros
  where autor regexp '[a-d]';

-- Para ver los títulos que comienzan con "A" tipeamos:
select titulo from libros
  where titulo regexp '^A';

-- Para ver los títulos que terminan en "HP" usamos:
select titulo from libros
  where titulo regexp 'HP$';

-- Para buscar títulos que contengan una "a" luego un caracter cualquiera y luego una "e":
select titulo from libros
  where titulo regexp 'a.e';

-- Podemos mostrar los títulos que contienen una "a" seguida de 2 caracteres y luego una "e":
select titulo from libros
  where titulo regexp 'a..e';

-- Para buscar autores que tengan 6 caracteres exactamente usamos:
select autor from libros
  where autor regexp '^......$';

-- Para buscar autores que tengan al menos 6 caracteres usamos:
select autor from libros
  where autor regexp '......';

-- Para buscar títulos que contengan 2 letras "a" usamos:
select titulo from libros
  where titulo regexp 'a.*a';

Que nos genera una salida similar a esta:

MySQL regexp

Retornar