Il y a la discussion (presque religieuse), si vous devez utiliser LIKE ou '=' pour comparer des chaînes dans des instructions SQL.
- Y a-t-il des raisons d'utiliser LIKE?
- Y a-t-il des raisons d'utiliser '='?
- Performance? Lisibilité?
sql
comparison
Guerda
la source
la source
LIKE
et les opérateurs d'égalité ont des objectifs différents, ils ne font pas la même chose:=
est beaucoup plus rapide, alors qu'ilsLIKE
peuvent interpréter des jokers. Utilisez=
partout où vous le pouvez etLIKE
où vous le devez.Exemples de matchs:
la source
Dans ma petite expérience:
"=" pour les correspondances exactes.
"LIKE" pour les matchs partiels.
la source
Il y a quelques autres astuces que Postgres propose pour la correspondance de chaînes (si cela se trouve être votre DB):
ILIKE, qui est une correspondance LIKE insensible à la casse:
Allumettes:
Et si vous voulez vraiment devenir fou, vous pouvez utiliser des expressions régulières:
Allumettes:
la source
Juste comme un avertissement, l'opérateur '=' remplira les chaînes avec des espaces dans Transact-SQL. Ainsi
'abc' = 'abc '
reviendra vrai;'abc' LIKE 'abc '
retournera faux. Dans la plupart des cas, «=» sera correct, mais dans un cas récent, ce n'était pas le cas.Ainsi, tandis que '=' est plus rapide, LIKE pourrait indiquer plus explicitement vos intentions.
http://support.microsoft.com/kb/316626
la source
Pour la correspondance de modèle, utilisez LIKE. Pour une correspondance exacte =.
la source
LIKE
est utilisé pour la correspondance de modèle et=
est utilisé pour le test d'égalité (tel que défini par leCOLLATION
en cours d'utilisation).=
peut utiliser des index alors que lesLIKE
requêtes nécessitent généralement de tester chaque enregistrement de l'ensemble de résultats pour le filtrer (sauf si vous utilisez la recherche en texte intégral), ce=
qui améliore les performances.la source
LIKE fait correspondre comme les jokers char [*,?] Au shell
LIKE '% suffix' - donnez-moi tout ce qui se termine par un suffixe. Vous ne pouvez pas faire ça avec =
dépend du cas en fait.
la source
Il y a une autre raison d'utiliser "comme" même si les performances sont plus lentes: les valeurs de caractère sont implicitement converties en entier lors de la comparaison, donc:
déclarer @transid varchar (15)
si @transid! = 0
vous donnera une erreur "La conversion de la valeur varchar '123456789012345' a débordé une colonne int".
la source