Utiliser '=' ou COMME pour comparer des chaînes en SQL?
Il n'y a (presque religieux) de discussion, si vous devez utiliser COMME ou '=' pour comparer des chaînes dans les instructions SQL.
- Sont là des raisons pour l'utiliser COMME?
- Sont là des raisons de l'utilisation de '='?
- La Performance? La lisibilité?
Vous devez vous connecter pour publier un commentaire.
Pour voir la différence de performances, essayez ceci:
De la comparaison de chaînes avec '=' est beaucoup plus rapide.
LIKE
et l'opérateur d'égalité ont des objectifs différents, ils ne font pas la même chose:=
est beaucoup plus rapide, alors queLIKE
peut interpréter les caractères génériques. Utilisation=
partout où vous le pouvez etLIKE
où vous devez.De l'échantillon correspond à:
Dans ma petite expérience:
"=" pour les Correspondances Exactes.
"J'AIME" pour les Correspondances Partielles.
Il y a un couple de d'autres trucs que Postgres offre pour la correspondance de chaîne (si ce qui arrive à être votre DB):
ILIKE, qui est insensible à la casse COMME match:
Matches:
Et si vous voulez obtenir vraiment fou, vous pouvez utiliser des expressions régulières:
Matches:
Comme un heads-up, l'opérateur '=' sera pavé de chaînes de caractères avec des espaces dans les instructions Transact-SQL. Donc
'abc' = 'abc '
retournera true;'abc' LIKE 'abc '
retournera false. Dans la plupart des cas '=' sera correct, mais dans un cas récent de la mine, il ne l'était pas.Ainsi, alors que '=' est plus rapide, COMME le serait peut-être plus explicitement état de votre intentions.
http://support.microsoft.com/kb/316626
De filtrage utiliser COMME. Pour une correspondance exacte =.
LIKE
est utilisé pour le filtrage et la=
est utilisé pour le test d'égalité (tel que défini par laCOLLATION
en cours d'utilisation).=
pouvez utiliser l'index lors de laLIKE
requêtes nécessitent généralement l'essai de chaque enregistrement unique dans l'ensemble de résultats de la filtrer (sauf si vous utilisez de la recherche plein texte), de sorte=
a une meilleure performance.COMME ne correspondant comme des caractères génériques char [*, ?] la coquille
LIKE '%suffixe " - donnez-moi tout ce qui se termine par le suffixe. Vous ne pouvais pas le faire avec =
Dépend le cas actuellement.
Il y a une autre raison pour l'utilisation de "like" même si la performance est plus lente: les valeurs de Caractères sont implicitement converti en entier lorsqu'on les compare, donc:
declare @transid de type varchar(15)
si @transid != 0
vous donnera un "La conversion de la valeur varchar "123456789012345' a débordé un int colonne" erreur.