2012-02-24 20 views
5

Description of LEN() function on MSDN: Devuelve el número de caracteres de la expresión de cadena especificada, excluyendo los espacios en blanco finales.¿Por qué la función LEN() de t-sql ignora los espacios finales?

¿Por qué la función LEN() está diseñada para funcionar de esta forma? ¿Qué problema resuelve este comportamiento?

relacionadas:

+3

http://stackoverflow.com/questions/4166159/sql-where-clause-matching-values-with-trailing-spaces, http://dba.stackexchange.com/questions/10510/behavior-of-varchar -with-spaces-at-the-end – GSerg

Respuesta

6

Se fija el relleno automático de cadenas debido a la longitud de tipo de datos . Considere lo siguiente:

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

Esto devolverá 4, 10, 5 y 10 respectivamente. Aunque no se utilizaron espacios finales para @Test, aún mantiene su longitud de 10. Si LEN no recortó los espacios finales, LEN(@test) y LEN(@Test2) serían lo mismo. La mayoría de las veces las personas querrán saber la longitud de los datos significativos, y no la longitud del relleno automático, por lo que LEN elimina los espacios en blanco posteriores. Hay soluciones alternativas donde este no es el comportamiento requerido.

-1

relleno espacio en fiels no variables como

CREATE TABLE tblSomething (variable_length varchar(20), non_var_lenght char(10)); 
Cuestiones relacionadas