Maison > base de données > tutoriel mysql > La clause « WHERE » de SQL Server ignore-t-elle les espaces de fin dans les comparaisons de chaînes ?

La clause « WHERE » de SQL Server ignore-t-elle les espaces de fin dans les comparaisons de chaînes ?

Linda Hamilton
Libérer: 2025-01-05 01:48:38
original
1012 Les gens l'ont consulté

Does SQL Server's `WHERE` Clause Ignore Trailing Spaces in String Comparisons?

Clause SQL WHERE : espaces de fin dans la correspondance de valeurs

Dans SQL Server, les comparaisons de chaînes utilisant la clause WHERE présentent un comportement particulier qui peut conduire à des résultats inattendus. Plus précisément, l'opérateur d'égalité (=) ignore les espaces de fin lors de l'exécution de comparaisons.

Considérons le scénario suivant :

  • Une table nommée Zone existe avec une colonne de clé primaire appelée ZoneReference de type varchar (50) avec la contrainte NOT NULL.
  • Une requête est exécutée pour sélectionner la valeur QuotedZoneReference pour une valeur ZoneReference de 'WF11XU' :
select '"' + ZoneReference + '"' as QuotedZoneReference
from Zone
where ZoneReference = 'WF11XU'
Copier après la connexion

Étonnamment, la requête renvoie le résultat suivant :

"WF11XU "
Copier après la connexion

Explication :

Ce comportement découle de la spécification SQL-92, qui stipule que les chaînes dans les opérations de comparaison doivent être complétées par des espaces pour garantir qu'elles ont la même longueur avant la comparaison. Dans ce cas, la valeur ZoneReference dans la clause WHERE (« WF11XU ») est complétée par un espace de fin, ce qui entraîne une correspondance avec la valeur du tableau.

Implications :

Ce remplissage peut entraîner des problèmes lorsque vous tentez de faire correspondre des valeurs exactes pouvant contenir des espaces de fin. Par exemple, si la valeur ZoneReference prévue était en réalité « WF11XU » sans l'espace de fin, la requête ne renverrait aucun résultat.

Solutions :

Pour garantir des correspondances précises, envisagez les solutions suivantes :

  • Utilisez la fonction TRIM() pour supprimer les espaces de fin de la valeur de la clause WHERE et de la colonne du tableau. value.
  • Convertissez explicitement les chaînes en un type de données qui n'autorise pas les espaces de fin, tel que nvarchar(50).
  • Ajustez les paramètres de classement SQL Server pour qu'ils soient sensibles à la casse et à l'espace. -sensible, ce qui empêchera que les espaces de fin soient ignorés.

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