SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Como o operador LIKE funciona no SQLite


No SQLite, você pode usar o LIKE operador em suas consultas para fazer uma comparação de correspondência de padrões.

Por exemplo, você pode adicioná-lo ao seu WHERE cláusula para retornar apenas as linhas que correspondem a um determinado padrão.

No entanto, adicioná-lo ao WHERE cláusula não é a única maneira que você pode usar o LIKE operador. Você também pode usá-lo para retornar um valor booleano.

Exemplo básico


Aqui está um exemplo básico que usa o LIKE operador em um WHERE cláusula.
SELECT * FROM Artist
WHERE Name LIKE 'Black%';

Resultado:
ArtistId    Name               
----------  -------------------
11          Black Label Society
12          Black Sabbath      
169         Black Eyed Peas    

Neste caso, eu queria devolver todos os artistas cujos nomes começam com Black .

O sinal de porcentagem é um caractere curinga que corresponde a zero ou mais de qualquer caractere (incluindo espaços).

Sem o curinga


Se eu não tivesse usado o caractere curinga, não teria obtido nenhum resultado.

Aqui está um exemplo do que quero dizer:
SELECT * FROM Artist
WHERE Name LIKE 'Black';

Resultado:
 
(Isso está intencionalmente em branco, porque não houve resultados.)

Vários curingas


Você pode usar mais de um caractere curinga, se necessário. Neste exemplo, adiciono outro à frente do meu padrão.
SELECT * FROM Artist
WHERE Name LIKE '%Black%';

Resultado:
ArtistId    Name               
----------  -------------------
11          Black Label Society
12          Black Sabbath      
38          Banda Black Rio    
137         The Black Crowes   
169         Black Eyed Peas    

Isso resulta no retorno de mais linhas, pois há duas linhas com Preto em seu nome, mas não apenas no início.

O caractere curinga de sublinhado (_)


Você também tem a opção de usar o sublinhado (_ ) curinga.

Este caractere curinga corresponde exatamente a um caractere (qualquer caractere).

Considere a seguinte tabela chamada Gatos :
CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh    
4           100%Fluff 
5           100$Fluff 

Sim, alguns desses gatos têm nomes estranhos, mas serão úteis.

Aqui está um exemplo de uso do caractere curinga de sublinhado em uma consulta nessa tabela.
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';

Resultado:
CatId       CatName   
----------  ----------
1           Brush     
2           Brash       

Observe que o gato chamado Broosh não está incluído.

Para incluir Broosh , eu precisaria usar dois sublinhados:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';

Resultado:
CatId       CatName   
----------  ----------
3           Broosh       

No entanto, isso exclui os outros dois gatos.

Eu sempre poderia usar um sinal de porcentagem para incluir os outros gatos.
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';

Resultado:
CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh      

No entanto, lembre-se de que isso também retornaria nomes com mais de dois caracteres entre Br e sh .

A Cláusula ESCAPE


Às vezes, seus dados podem incluir os caracteres curinga. Em outras palavras, os dados contêm sublinhados ou sinais de porcentagem.

Isso pode ser um problema se você estiver realmente tentando corresponder o sublinhado ou o sinal de porcentagem como um caractere literal e não como um curinga.

Na minha tabela de gatos, você notará que um gato tem um sinal de porcentagem em seu nome. Outro gato tem quase exatamente o mesmo nome, exceto que, em vez de um sinal de porcentagem, é um cifrão.

Aqui está a tabela novamente:
CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh    
4           100%Fluff 
5           100$Fluff 

Se eu quisesse retornar apenas aqueles gatos cujos nomes começam com 100%F então eu precisaria escapar do % . Se eu não escapasse disso, obteria resultados indesejados.

Veja o que acontece se eu executar uma consulta sem escapando do sinal de porcentagem.
SELECT * FROM Cats
WHERE CatName LIKE '100%F';

Resultado:
CatId       CatName   
----------  ----------
4           100%Fluff 
5           100$Fluff 

Nesse caso, o sinal de porcentagem também correspondeu ao cifrão, porque o sinal de porcentagem estava sendo tratado como um caractere curinga.

Para garantir que o sinal de porcentagem não seja tratado como um caractere curinga, podemos usar o ESCAPE cláusula.
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';

Resultado:
CatId       CatName   
----------  ----------
4           100%Fluff 

Retorne um valor booleano


Você pode usar o LIKE operador para retornar um 0 ou 1 , dependendo se há uma correspondência ou não.

Aqui está um exemplo.
SELECT 
  CatName,
  CatName LIKE 'Br%' 
FROM Cats;

Resultado:
CatName     CatName LIKE 'Br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

Nesse caso, as três primeiras linhas correspondem aos critérios e as duas últimas linhas não.

Sensibilidade a maiúsculas e minúsculas


Por padrão, o SQLite LIKE operador não diferencia maiúsculas de minúsculas para caracteres ASCII. Isso significa que ele corresponderá a caracteres maiúsculos e minúsculos, independentemente de qual maiúscula você usar em seu padrão.

Você pode usar o case_sensitive_like Instrução PRAGMA para realizar correspondências que diferenciam maiúsculas de minúsculas no intervalo ASCII.

Veja Como tornar o operador LIKE do SQLite sensível a maiúsculas e minúsculas para obter exemplos.

A função Like()


Uma maneira alternativa de fazer isso é usar o like() função.

Esta função faz exatamente a mesma coisa que o LIKE operador, exceto que você precisa usar uma sintaxe ligeiramente diferente.

Todos os exemplos acima podem ser reescritos para usar o like() função, se necessário.