Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La clausola SQL WHERE fa corrispondere i valori con gli spazi finali

Questo è il risultato atteso:in SQL Server il = l'operatore ignora gli spazi finali durante il confronto.

SQL Server segue la specifica ANSI/ISO SQL-92 (Sezione 8.2, Regole generali n. 3) su come confrontare le stringhe con gli spazi. Lo standard ANSI richiede il riempimento per le stringhe di caratteri utilizzate nei confronti in modo che le loro lunghezze corrispondano prima di confrontarle. Il riempimento influisce direttamente sulla semantica dei predicati delle clausole WHERE e HAVING e su altri confronti di stringhe Transact-SQL. Ad esempio, Transact-SQL considera le stringhe "abc" e "abc" equivalenti per la maggior parte delle operazioni di confronto.

L'unica eccezione a questa regola è il predicato LIKE. Quando il lato destro di un'espressione del predicato LIKE presenta un valore con uno spazio finale, SQL Server non riempie i due valori alla stessa lunghezza prima che si verifichi il confronto. Poiché lo scopo del predicato LIKE, per definizione, è facilitare le ricerche di modelli piuttosto che semplici test di uguaglianza delle stringhe, ciò non viola la sezione della specifica ANSI SQL-92 menzionata in precedenza.

Fonte