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
Libérer: 2025-01-05 03:16:40
original
905 Les gens l'ont consulté

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'
Copier après la connexion

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 "
Copier après la connexion

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'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal