Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Clause SQL WHERE faisant correspondre les valeurs avec des espaces de fin

C'est le résultat attendu :dans SQL Server, le = l'opérateur ignore les espaces de fin lors de la comparaison.

SQL Server suit la spécification ANSI/ISO SQL-92 (Section 8.2, , Règles générales #3) sur la façon de comparer les chaînes avec des espaces. La norme ANSI requiert un remplissage pour les chaînes de caractères utilisées dans les comparaisons afin que leurs longueurs correspondent avant de les comparer. Le remplissage affecte directement la sémantique des prédicats de clause WHERE et HAVING et d'autres comparaisons de chaînes Transact-SQL. Par exemple, Transact-SQL considère que les chaînes 'abc' et 'abc ' sont équivalentes pour la plupart des opérations de comparaison.

La seule exception à cette règle est le prédicat LIKE. Lorsque le côté droit d'une expression de prédicat LIKE comporte une valeur avec un espace de fin, SQL Server ne remplit pas les deux valeurs à la même longueur avant que la comparaison ne se produise. Étant donné que le but du prédicat LIKE, par définition, est de faciliter les recherches de modèles plutôt que de simples tests d'égalité de chaînes, cela ne viole pas la section de la spécification ANSI SQL-92 mentionnée précédemment.

Source