Piégé par les espaces de fin : une énigme de comparaison SQL
Considérez la requête SQL suivante, dans laquelle nous essayons de faire correspondre une valeur dans la table Zone :
select '"' + ZoneReference + '"' as QuotedZoneReference from Zone where ZoneReference = 'WF11XU'
À notre grande surprise, le résultat montre une traînée inattendue space :
"WF11XU "
Malgré les espaces de fin, SQL Server renvoie une correspondance, nous laissant perplexes.
Ce comportement apparemment contre-intuitif peut être expliqué en plongeant dans les normes qui guident les comparaisons de chaînes de SQL Server . Conformément aux spécifications ANSI/ISO SQL-92, SQL Server complète les chaînes de caractères utilisées dans les comparaisons pour garantir qu'elles ont la même longueur avant d'effectuer la vérification. Cette règle s'étend à la plupart des opérations de comparaison, rendant les chaînes comme 'abc' et 'abc ' équivalentes pour les comparaisons de chaînes.
Cependant, l'exception à cette règle est le prédicat LIKE. Ce n'est que lorsque l'opérateur LIKE est impliqué que SQL Server s'abstient de remplir. Cette distinction découle de l'objectif principal du prédicat LIKE, à savoir la correspondance de modèles plutôt que les tests directs d'égalité de chaînes.
Dans notre cas, puisque nous utilisons l'opérateur d'égalité simple (=), l'espace de fin est pris en compte par SQL Server. , menant à un match réussi. Si notre intention était de rechercher des correspondances exactes, nous pourrions utiliser le prédicat LIKE, qui ignorerait l'espace de fin et fournirait un résultat plus précis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!