web-dev-qa-db-fra.com

Utilisez '=' ou LIKE pour comparer des chaînes en SQL?

Il y a la discussion (presque religieuse), si vous devez utiliser LIKE ou '=' pour comparer les chaînes dans les instructions SQL.

  • Y a-t-il des raisons d'utiliser LIKE?
  • Y a-t-il des raisons d'utiliser '='?
  • Performance? Lisibilité?
153
guerda

Pour voir la différence de performance, essayez ceci:

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name

Comparer des chaînes avec '=' est beaucoup plus rapide.

119
Techmaddy

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 que LIKE peut interpréter les caractères génériques. Utilisez = où vous le pouvez et LIKE où vous le souhaitez.

SELECT * FROM user WHERE login LIKE 'Test%';

Exemples de correspondances:

TestUser1
TestUser2
TestU
Tester

181
soulmerge

Dans ma petite expérience:

"=" pour les correspondances exactes.

"LIKE" pour les correspondances partielles.

33
Stu Andrews

Postgres propose quelques astuces pour la correspondance des chaînes (si cela se trouve être votre base de données):

ILIKE, qui est une correspondance LIKE insensible à la casse:

select * from people where name ilike 'JOHN'

Allumettes:

  • John
  • john
  • JOHN

Et si vous voulez devenir vraiment fou, vous pouvez utiliser des expressions régulières:

select * from people where name ~ 'John.*'

Allumettes:

  • John
  • Johnathon
  • Johnny
13
Ceilingfish

En tête à tête, l'opérateur '=' complétera les chaînes avec des espaces dans Transact-SQL. Donc, 'abc' = 'abc ' retournera vrai; 'abc' LIKE 'abc ' retournera false. Dans la plupart des cas, "=" sera correct, mais dans un cas récent, ce n'était pas le cas.

Ainsi, alors que '=' est plus rapide, LIKE pourrait indiquer plus explicitement vos intentions.

http://support.Microsoft.com/kb/316626

9
Philip H

Pour le filtrage, utilisez LIKE. Pour correspondance exacte =.

7
Techmaddy

LIKE est utilisé pour la recherche de motif et = est utilisé pour le test d'égalité (tel que défini par le COLLATION utilisé).

= peut utiliser des index tandis que LIKE les requêtes nécessitent généralement de tester chaque enregistrement du jeu de résultats pour le filtrer (sauf si vous utilisez la recherche en texte intégral) afin que = ait de meilleures performances.

6
Mehrdad Afshari

LIKE fait la correspondance comme des caractères génériques char [*,?] Sur Shell
LIKE '% suffix' - donnez-moi tout ce qui se termine par un suffixe. Vous ne pouviez pas faire ça avec =
Cela dépend de l’affaire.

4
Gishu

Il y a une autre raison d'utiliser "comme" même si les performances sont plus lentes: les valeurs de caractère sont converties implicitement en entier lors de la comparaison, ainsi:

declare @transid varchar (15)

si @transid! = 0

vous donnera une erreur "La conversion de la valeur varchar '123456789012345' débordée d'une colonne int".

3
Uniotter