devgameschool

Como buscar parte de um texto com LIKE no SQL?

O LIKE procura por pedaço de texto. Serve para quando você não tem o valor inteiro: a testemunha só lembra do começo do nome, você só tem o sobrenome, ou o jeito de escrever varia de linha para linha.

Como se escreve

SELECT <colunas> FROM <tabela> WHERE <coluna> LIKE '<molde>';
%  qualquer pedaço de texto, inclusive nenhum
_  exatamente um caractere, qualquer um

Moldes: 'Jorge%' começa com, '%Amado' termina com, '%Ama%' contém.

Exemplo para rodar

Todos os exemplos usam duas tabelinhas: livro (titulo, autor, ano, paginas) e emprestimo (livro, retirado_em, leitor, dias).

SELECT titulo, autor FROM livro WHERE autor LIKE '%o';
titulo autor
O Cortiço Aluísio Azevedo
Capitães da Areia Jorge Amado
Triste Fim de Policarpo Quaresma Lima Barreto
3 linhas no resultado

Dicas

  • LIKE sem nenhum % vira um = mais lento: LIKE 'Amado' só acha quem for exatamente Amado.
  • No SQLite o LIKE não diferencia maiúscula de minúscula nas letras de A a Z: LIKE 'jorge%' acha Jorge Amado. Mas isso vale só para o alfabeto sem acento — para ele, ç e Ç são letras diferentes, e '%CORTIÇO' não acha O Cortiço.
  • O _ conta uma posição exata. LIKE '196_' pega qualquer ano de 1960 a 1969.
  • Quem tem o valor inteiro na mão usa =: é mais direto e não traz vizinho parecido junto.

Erros comuns

Você escreveu
SELECT titulo FROM livro WHERE autor LIKE %Amado%;
O SQLite respondeu
near "%": syntax error
Como consertar
O molde é texto e vai entre aspas simples: LIKE '%Amado%'.
Você escreveu
SELECT titulo FROM livro WHERE autor LIKE 'Amado';
O SQLite respondeu
Nenhum erro, e nenhuma linha.
Como consertar
Faltou o %. O valor gravado é Jorge Amado, então o molde que acha é '%Amado'.
Você escreveu
SELECT titulo FROM livro WHERE autor LIKE '%a%';
O SQLite respondeu
Nenhum erro, e as seis linhas da tabela.
Como consertar
Molde curto demais acha todo mundo: não existe autor sem a letra a. Dê mais letras, ou prenda uma das pontas: 'A%'.

Veja também

Onde isso aparece no jogo

No jogo Delegacia SQL, LIKE é o que resolve o inquérito 003, "Meia placa". SISPOL, que aparece nas dicas, é o computador da delegacia do jogo.

Jogar Delegacia SQL