Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Comparar cadenas

Estas en el tema de Comparar cadenas en el foro de SQL Server en Foros del Web. Hola. Tengo una duda existencial con SQL Server 2005, al hacer una comparación de cadenas, resulta que 'valor' = 'valor ', cuando la cadena de ...
  #1 (permalink)  
Antiguo 03/09/2009, 17:16
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Comparar cadenas

Hola.

Tengo una duda existencial con SQL Server 2005, al hacer una comparación de cadenas, resulta que 'valor' = 'valor ', cuando la cadena de la derecha es más larga y tiene espacios, vean el ejemplo:

Código:
DECLARE @var char(10)
DECLARE @var2 char(10)

SET   @var =  'valor'
SET   @var2 =  'valor   '

SELECT 'the same' 
WHERE @var = @var2

-- Resultado
--------
the same

(1 row(s) affected)

O que estoy haciendo mal.

Saludos.
  #2 (permalink)  
Antiguo 03/09/2009, 20:55
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Respuesta: Comparar cadenas

No estás haciendo mal nada. Así está definido en el estándar SQL92, el cual cito:
Código:
8.2  <comparison predicate>
General Rules
...
3) The comparison of two character strings is determined as fol-
            lows:

            a) If the length in characters of X is not equal to the length
              in characters of Y, then the shorter string is effectively
              replaced, for the purposes of comparison, with a copy of
              itself that has been extended to the length of the longer
              string by concatenation on the right of one or more pad char-
              acters, where the pad character is chosen based on CS. If
              CS has the NO PAD attribute, then the pad character is an
              implementation-dependent character different from any char-
              acter in the character set of X and Y that collates less
              than any string under CS. Otherwise, the pad character is a
              <space>.
En pocas palabras, la longitud de @var es 5, mientras que la longitud de @var2 es 8. Puesto que la primera es menor que la segunda, una copia de la primera debe ser completada hasta una longitud de 8 con espacios y comparada con la segunda, resultando así "true" en la comparación.

Saludos.

Pd: CS --> Collating Sequence

Última edición por Beakdan; 03/09/2009 a las 20:57 Razón: Faltó el significado de un acrónimo.
  #3 (permalink)  
Antiguo 04/09/2009, 09:10
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Respuesta: Comparar cadenas



Gracias por tu respuesta, aunque ahora tengo que resolver ese caso en mi aplicación que hasta hoy no habia entendido, porque a veces fallaba.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:19.