TOP

Lição SQL 5. Curingas e expressões regulares (LIKE)

Freqüentemente, para filtrar dados, precisaremos fazer uma amostragem não pela correspondência exata da condição, mas por um valor aproximado. Isto é, quando, por exemplo, procuramos um produto cujo nome corresponda a um determinado padrão (expressão regular) ou contenha determinados símbolos ou palavras. Para tal, existe um operador LIKE em SQL, que procura valores aproximados. Para construir tal padrão são utilizados metacaracteres (caracteres especiais, para busca de parte do valor), a saber: “sinal de porcentagem” (%) ou asterisco (*), “sublinhado” (_) ou “ponto de interrogação” (?) , "colchetes" ([ ]).


1. Sinal de porcentagem de metacaracteres (%) ou asterisco (*)

Vamos, por exemplo, selecionar registros de nossa tabela relacionados apenas a produtos que contenham a palavra Esquis em seu nome. Para fazer isso, criaremos um modelo adequado:

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

Como você pode ver, o SGBD selecionou apenas os registros onde a coluna Produto continha produtos contendo a palavra Esquis.

Este exemplo usa o metacaractere asterisco (*) porque MS Access não suporta o "sinal de porcentagem" (%) para o operador LIKE.

2. Sublinhado de metacaractere (_) ou ponto de interrogação (?)

Um sublinhado ou ponto de interrogação é usado para substituir um único caractere em uma palavra. Vamos substituir todas as vogais da palavra Bikes por um “ponto de interrogação” (?) e ver o resultado:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
Usamos o metacaractere "ponto de interrogação" (?) porque MS Access não suporta o "sublinhado" (_) para o operador LIKE.

3. Colchetes de metacaracteres ([ ])

O metacaractere entre colchetes ([ ]) é usado para especificar simultaneamente um conjunto de caracteres para pesquisa.

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

No exemplo acima, selecionamos registros onde os nomes das cidades começam com a letra T ou N no campo City.

O metacaractere entre colchetes ([ ]) não é suportado no dialeto MySQL.

Além disso, neste caso, podemos usar outro metacaractere que faça o oposto. Vamos adicionar um ponto de exclamação (!) à nossa expressão regular, que significará "diferente" (para MS Access) ou um sinal de potência (^) (para outros SGBDs).

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

Ou seja, a última consulta que criamos será lida como: selecione todas as colunas da tabela Sumproduct, e apenas aqueles registros onde os nomes das cidades no campo City não começam com as letras T ou N. Além disso, notamos que o conjunto de letras no metacaractere "colchetes" corresponde apenas a uma posição no texto.

Podemos obter um resultado semelhante se usarmos o operador NOT que já conhecemos, mas com um ponto de exclamação (!) o registro será mais curto.