Maison >base de données >tutoriel mysql >Pourquoi SQL Server ignore-t-il les espaces de fin dans les comparaisons de clauses WHERE ?

Pourquoi SQL Server ignore-t-il les espaces de fin dans les comparaisons de clauses WHERE ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 03:16:40961parcourir

Why Does SQL Server Ignore Trailing Spaces in WHERE Clause Comparisons?

Différence des espaces de fin dans les comparaisons de clauses SQL WHERE

Dans SQL Server, la comparaison de clauses WHERE utilisant l'opérateur = pose souvent une divergence qui peut être perplexe. Plus précisément, les espaces de fin dans les valeurs de chaîne sont ignorés lors de la comparaison. Ce comportement s'écarte de ce à quoi on pourrait s'attendre, conduisant à des résultats inattendus.

Exemple de démonstration

Considérez l'exemple suivant dans SQL Server 2008 :

SELECT '"' + ZoneReference + '"' AS QuotedZoneReference
FROM Zone
WHERE ZoneReference = 'WF11XU'

Cette requête récupère les données d'une table appelée « Zone », où « ZoneReference » est la colonne de clé primaire. L'exécution de la requête renverrait le résultat suivant :

"WF11XU "

Remarquez l'espace de fin ajouté à la valeur dans le résultat. Ceci malgré le fait que les critères de comparaison n'incluent aucun espace de fin.

Cause de la divergence

La divergence est due au SQL ANSI/ISO SQL- 92, en particulier la section 8.2, qui dicte la manière dont les comparaisons de chaînes avec des espaces sont gérées. Conformément à la spécification, SQL Server remplit les chaînes de caractères utilisées dans les comparaisons pour qu'elles correspondent en longueur avant d'effectuer la comparaison. Cela signifie que les espaces de fin sont automatiquement ajoutés ou supprimés pour aligner les longueurs.

Impact sur les résultats

Dans la plupart des cas, l'inclusion d'espaces de fin dans les correspondances de comparaison produit les résultats attendus. résultats. Cependant, lors de la comparaison de valeurs où les espaces de fin sont significatifs, cela peut conduire à des résultats incorrects ou inattendus. Par exemple, lors de la recherche de correspondances exactes incluant des espaces, l'espace de fin supplémentaire peut provoquer de fausses correspondances.

Résolution

Pour résoudre le problème et garantir une comparaison précise, un peut utiliser la fonction TRIM() pour supprimer tous les espaces de début ou de fin des chaînes impliquées dans la comparaison. Cela forcera une correspondance exacte sans remplissage.

Exemple de solution

SELECT '"' + TRIM(ZoneReference) + '"' AS QuotedZoneReference
FROM Zone
WHERE TRIM(ZoneReference) = 'WF11XU'

L'utilisation de la fonction TRIM() comme démontré garantit une correspondance exacte de la chaîne, y compris les espaces .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn