LIKE é usado amplamente em SQL quando queremos encontrar um valor mas só temos parte deste valor.
Exemplo:
Supomos que temos cadastro de pessoas com os seguintes registros:
:: João Silva Pereira
:: Carlos Martins
:: Eduardo Silva
Agora vamos supor que queremos selecionar todas as pessoas que tem o sobrenome Silva.
Não dá pra usar o o perador "=", porque nenhum dos registros é " = 'Silva'", mas alguns deles contém a Silva. Nesse caso usamos LIKE!
Perceba que Carlos Martins foi excluído do resultado por não conter a palavra Silva.SELECT * FROM pessoas WHERE nome LIKE '%Silva%'Se fizéssemos a consulta acima, a consulta retornaria o seguinte:
:: João Silva Pereira
:: Eduardo Silva
Se fosse o contrário, ou seja, selecionar todos que não têm o sobrenome Silva, bastaria usar o operador de negação.
SELECT * FROM pessoas WHERE nome NOT LIKE '%Silva%'A consulta acima resultaria:
:: Carlos Martins
Estes "%" usados no LIKE não está alí por acaso. Na verdade são os % que fazem toda a mágica!
Os "%" significam "qualquer coisa" (em alguns outros SGBDs é usado o "*" ao invés de "%").
Se tivermos um "%" à esquerda do parâmetro (no caso do nosso exemplo o parâmetro era a palavra Silva), o LIKE vai procurar todos os nomes que possuam e terminem com o valor do parâmetro.
A mesma coisa acontece se mentivermos apenas o "%" da direita, com a diferença de que a consulta retornaria apenas os registros que começam com Silva.
Os exemplos abaixo ilustram isso:
SELECT * FROM pessoas WHERE nome LIKE '%Silva'Retorno:
:: Eduardo SilvaSELECT * FROM pessoas WHERE nome LIKE 'Silva%'Retorno:
(nenhuma linha foi encontrada porque nenhum nome começa com Silva)
No PostgreSQL o "%" tem um irmão: o "_".
A diferença é que, enquanto o % admite qualquer quantidade de caracteres, o "_" admite apenas uma. Exemplo:
SELECT * FROM pessoas WHERE nome LIKE 'Eduar_o Silva'Retorno:
:: Eduardo Silva
Sem estes carcteres especiais o LIKE funciona exatamete com o "=". Exemplo:
SELECT * FROM pessoas WHERE nome LIKE 'Eduardo Silva'Retorno:
:: Eduardo SilvaSELECT * FROM pessoas WHERE nome LIKE 'Silva'Retorno:
(nenhuma registro foi encontrado, pois nenhum nome é = a Silva)
LIKE em case insensitive
No PostgreSQL o LIKE é case sensitive, ou seja, diferencia maiúsculas de minúsculas.
'SILVA' é diferente de 'Silva'
'SILVA' só é igual a 'SILVA'
Sabemos que nem sempre isso é interessante, pois nem sempre a pesquisa com os cases corretos. Para esses casos existe o iLIKE, que funciona da mesma forma que o LIKE, mas é case insensitive.
Exemplos:
SELECT * FROM pessoas WHERE nome LIKE '%silva%'Retorno:
(nenhuma registro foi encontrado)SELECT * FROM pessoas WHERE nome iLIKE 'silva'Retorno:
:: João Silva Pereira
:: Eduardo Silva
Utilizando LIKE em todos os campos de uma tabela
Um recurso bem interessante é utilizar o LIKE em todos os capos de uam tabela de forma realmente simples! Para isto basta utilizar o nome da tabela (convertida para varchar, claro) ao invés do nome de um campo. Exemplo:
Isso é possível porque quando utilizamos o nome da tabela ao invés do nome de um campo, o Postgres nos retorna uma string contendo todos os valores de todas as colunas, dispensando o trabalho chato de verificar coluna a coluna ou concatenar e converter todas elas.SELECT * FROM pessoas WHERE pessoas::varchar iLIKE 'silva'Retorno:
:: João Silva Pereira
:: Eduardo Silva
Utilizando expressões regulares com SIMILAR TO
O LIKE não dá suporte a expressões regulares. Para isso é preciso usar o SIMILAR TO, que funciona exatamente como o LIKE, exceto por essa caraterística de suportar expressões regulares.
Sinônimos
O PostgreSQL têm operadores que funcionam exatamente com o LIKE e o SIMILAR TO. São eles:
~~ é o mesmo queLIKE
!~~ é o mesmo queNOT LIKE
~~*é o mesmo que iLIKE
!~~* é o mesmo que NOT iLIKE
~ é o mesmo que SIMILAR TO
~* é o mesmo que SIMILAR TO em case insensitive
!~ é o mesmo que SIMILAR TO, só que em negação
!~* é o mesmo que SIMILAR TO, só que em negação e em case insensitive
Retorno
O retorno sempre será true ou false.