Há a discussão (quase religiosa), se você deve usar LIKE ou '=' para comparar seqüências de caracteres nas instruções SQL.
- Existem razões para usar o LIKE?
- Existem razões para usar '='?
- Atuação? Legibilidade?
sql
comparison
guerda
fonte
fonte
LIKE
e o operador de igualdade tem propósitos diferentes, eles não fazem a mesma coisa:=
é muito mais rápido, ao passo queLIKE
podem interpretar curingas. Use=
sempre que puder eLIKE
onde precisar.Correspondências de amostra:
fonte
Na minha pequena experiência:
"=" para correspondências exatas.
"LIKE" para correspondências parciais.
fonte
Existem alguns outros truques que o Postgres oferece para correspondência de strings (se esse for o seu banco de dados):
ILIKE, que é uma correspondência LIQ que não diferencia maiúsculas de minúsculas:
Partidas:
E se você quiser ficar realmente bravo, pode usar expressões regulares:
Partidas:
fonte
Assim como um aviso, o operador '=' preencherá cadeias de caracteres com espaços no Transact-SQL. Então
'abc' = 'abc '
, retornará verdadeiro;'abc' LIKE 'abc '
retornará falso. Na maioria dos casos, '=' estará correto, mas em um caso recente meu não estava.Portanto, embora '=' seja mais rápido, o LIKE pode indicar mais explicitamente suas intenções.
http://support.microsoft.com/kb/316626
fonte
Para correspondência de padrões, use LIKE. Para correspondência exata =.
fonte
LIKE
é usado para correspondência de padrões e=
é usado para teste de igualdade (conforme definido peloCOLLATION
em uso).=
pode usar índices enquanto asLIKE
consultas geralmente exigem o teste de cada registro no conjunto de resultados para filtrá-lo (a menos que você esteja usando a pesquisa de texto completo) para obter=
um melhor desempenho.fonte
LIKE faz correspondência como caracteres curinga char [*,?] No shell
LIKE '% suffix' - me dá tudo o que termina com sufixo. Você não poderia fazer isso com =
Depende do caso, na verdade.
fonte
Há outro motivo para usar "like", mesmo que o desempenho seja mais lento: os valores dos caracteres são implicitamente convertidos em número inteiro quando comparados, portanto:
declare @transid varchar (15)
if @transid! = 0
fornecerá um erro "A conversão do valor varchar '123456789012345' excedeu a capacidade de uma coluna int".
fonte