TOP

SQL-Lección 5. Comodines y expresiones regulares (LIKE)

A menudo, para filtrar datos, necesitaremos tomar muestras no por la coincidencia exacta de la condición, sino por un valor aproximado. Es decir, cuando, por ejemplo, buscamos un producto cuyo nombre coincida con un determinado patrón (expresión regular) o contenga determinados símbolos o palabras. Para tales fines, existe un operador LIKE en SQL, que busca valores aproximados. Para construir dicho patrón, se utilizan metacaracteres (caracteres especiales, para buscar parte del valor), a saber: "signo de porcentaje" (%) o asterisco (*), "guión bajo" (_) o "signo de interrogación" (?) , "corchetes" ([ ]).


1. Signo de porcentaje de metacarácter (%) o asterisco (*)

Por ejemplo, seleccionemos registros de nuestra tabla que se relacionen únicamente con productos que contengan la palabra Esquís en su nombre. Para ello, crearemos una plantilla adecuada:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

Como puede ver, el DBMS seleccionó solo aquellos registros donde la columna Producto contenía productos que contenían la palabra Esquís.

Este ejemplo utiliza el metacarácter asterisco (*) porque MS Access no admite el "signo de porcentaje" (%) para el operador LIKE.

2. Metacarácter de subrayado (_) o signo de interrogación (?)

Se utiliza un guión bajo o un signo de interrogación para reemplazar un solo carácter en una palabra. Reemplacemos todas las vocales de la palabra Bicicletas con un "signo de interrogación" (?) y veamos el resultado:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
Usamos el metacarácter "signo de interrogación" (?) porque MS Access no admite el "guión bajo" (_) para el operador LIKE.

3. Corchetes de metacaracteres ([ ])

El metacarácter de corchete ([ ]) se utiliza para especificar simultáneamente un conjunto de caracteres para realizar la búsqueda.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

En el ejemplo anterior, seleccionamos registros donde los nombres de las ciudades comienzan con la letra T o N en el campo City.

El metacarácter de corchetes ([ ]) no se admite en el dialecto MySQL.

Además, en este caso, podemos utilizar otro metacarácter que haga lo contrario. Agreguemos un signo de exclamación (!) a nuestra expresión regular, que significará "no igual" (para MS Access) o un signo de poder (^) (para otros DBMS).

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

Es decir, la última consulta que creamos se leerá como: seleccione todas las columnas de la tabla Sumproduct, y solo aquellos registros donde los nombres de las ciudades en el campo City no comiencen con las letras T o N. Además, observamos que la El conjunto de letras en el metacarácter "corchetes" corresponde solo a una posición en el texto.

Podemos obtener un resultado similar si usamos el operador NOT que ya conocemos, pero con un signo de exclamación (!) el registro será más corto.