Saltar al contenido

Comportamiento de Varchar con espacios al final

Queremos enseñarte la mejor información que encontramos online. Esperamos que te resulte útil y si quieres aportar alguna mejora hazlo con libertad.

Solución:

Todo está de acuerdo con el estándar ANSI:

Explicación de los espacios en blanco finales:

SQL Server sigue la especificación ANSI/ISO SQL-92 (Sección 8.2, Reglas generales #3) sobre cómo comparar cadenas con espacios. El estándar ANSI requiere relleno para las cadenas de caracteres utilizadas en las comparaciones para que sus longitudes coincidan antes de compararlas. El relleno afecta directamente la semántica de los predicados de las cláusulas WHERE y HAVING y otros Transact-SQL. string
comparaciones Por ejemplo, Transact-SQL considera que las cadenas ‘abc’ y ‘abc ‘ son equivalentes para la mayoría de las operaciones de comparación.

La única excepción a esta regla es el predicado LIKE. Cuando el lado derecho de una expresión de predicado LIKE presenta un valor con un espacio final, SQL Server no rellena los dos valores con la misma longitud antes de que se produzca la comparación. Porque el propósito del predicado LIKE, por definición, es facilitar la búsqueda de patrones en lugar de simples string pruebas de igualdad, esto no viola la sección de la especificación ANSI SQL-92 mencionada anteriormente.

Aquí hay un ejemplo bien conocido de todos los casos mencionados anteriormente:

DECLARE @a VARCHAR(10)
DECLARE @b varchar(10)

SET @a = '1'
SET @b = '1 ' --with trailing blank

SELECT 1
WHERE 
    @a = @b 
AND @a NOT LIKE @b
AND @b LIKE @a

Aquí hay más detalles sobre los espacios en blanco finales y el LIKE cláusula.

PERO si desea diferenciarlos, puede decidir utilizar DATALENGTH función en lugar de LENporque

SELECT 1 WHERE LEN('John ') = LEN('John')

te pondrá 1 en lugar de

SELECT 1 WHERE DATALENGTH('John ') = DATALENGTH('John')

La solución es

  • para usar la función DATALENGTH para diferenciar entre cadenas
  • para lanzar el string en el tipo NVARCHAR – puede ser mejor declarar este tipo al parámetro de SP

Aquí tienes las comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *