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 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é?

    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 

    La comparaison de chaînes avec ‘=’ est beaucoup plus rapide.

    LIKE et l’opérateur d’égalité ont des objectives 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ù que vous soyez et LIKE où vous devez.

     SELECT * FROM user WHERE login LIKE 'Test%'; -- Matches -- TestUser1 -- TestUser2 -- TestU -- Test -- etc. 

    Dans ma petite expérience:

    “=” pour les correspondances exactes.

    “LIKE” pour les correspondances partielles.

    Postgres propose quelques autres astuces pour la correspondance de chaînes (si cela se trouve être votre firebase database):

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

     select * from people where name ilike 'JOHN' 

    Allumettes:

    • John
    • John
    • JOHN

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

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

    Allumettes:

    • John
    • Johnathon
    • Johnny

    Juste comme un heads-up, l’opérateur “=” remplira les chaînes avec des espaces dans Transact-SQL. Donc 'abc' = 'abc ' retournera true; 'abc' LIKE 'abc ' renverra false. Dans la plupart des cas, “=” sera correct, mais dans un cas récent, ce n’était pas le cas.

    Donc, même si ‘=’ est plus rapide, LIKE peut indiquer plus explicitement vos intentions.

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

    Pour la correspondance de modèle, utilisez LIKE. Pour une correspondance exacte =.

    LIKE est utilisé pour la correspondance de modèle et = est utilisé pour le test d’égalité (tel que défini par la COLLATION utilisée).

    = peut utiliser des index alors que les requêtes LIKE requièrent généralement de tester chaque enregistrement du jeu de résultats pour le filtrer (à moins que vous n’utilisiez la recherche en texte intégral) pour avoir de meilleures performances.

    LIKE fait-il correspondre comme des caractères génériques char [*,?] Sur le shell
    LIKE ‘% suffix’ – donne moi tout ce qui se termine par le suffixe. Vous ne pouviez pas faire ça avec =
    Dépend de l’affaire en fait.

    Il y a une autre raison d’utiliser “like” même si les performances sont plus lentes: les valeurs de caractères sont implicitement converties en entier par comparaison, donc:

    déclarer @transid varchar (15)

    si @transid! = 0

    vous obtiendrez une erreur “La conversion de la valeur varchar ‘123456789012345’ a débordé une colonne int”.