2012-02-24 10 views
5

Description of LEN() function on MSDN: Zwraca liczbę znaków określonego wyrażenia ciągu, , z wyjątkiem końcowych pustych znaków.Dlaczego funkcja LEN() t-sql zignoruje końcowe spacje?

Dlaczego funkcja LEN() została zaprojektowana tak, aby działała w ten sposób? Jaki problem rozwiązuje to zachowanie?

pokrewne:

+3

http://stackoverflow.com/questions/4166159/sql-where-clause-matching-values-with-trailing-spaces, http://dba.stackexchange.com/questions/10510/behavior-of-varchar -z-przestrzeni-na-końcu – GSerg

Odpowiedz

6

Ustaliła ona automatyczne dopełnienie łańcuchów ze względu na długość typu danych . Rozważ następujące:

DECLARE @Test CHAR(10), @Test2 CHAR(10) 
SET @Test = 'test' 
SET @Test2 = 'Test2' 
SELECT LEN(@Test), LEN(@Test + '_') - 1, LEN(@Test2), LEN(@Test2 + '_') - 1 

To spowoduje powrót odpowiednio 4, 10, 5 i 10. Mimo że dla @Test nie użyto żadnych spacji końcowych, to nadal zachowuje on swoją długość 10. Jeśli LEN nie uciął spacji, wtedy LEN(@test) i LEN(@Test2) byłyby takie same. Częściej ludzie nie będą chcieli znać długości znaczących danych, a nie długości automatycznego wypełniania, aby LEN usuwał spacje końcowe. Istnieją rozwiązania alternatywne, jeśli nie jest to wymagane zachowanie.

-1

przestrzeń wyściółka w niewyspecjalizowanych fiels zmiennych jak

CREATE TABLE tblSomething (variable_length varchar(20), non_var_lenght char(10)); 
Powiązane problemy