Сравнение SQL char с varchar работает, почему? - PullRequest
5 голосов
/ 23 ноября 2011

Почему следующее возвращает результат, когда целевой столбец в предложении where является char (20)?

declare @pallettag varchar(20)
set @pallettag = '168531'
--set @pallettag = @pallettag + SPACE(20 - Len(@pallettag))

select s.ROWID, s.SUBLOTCODE + '*', @pallettag + '*'
from IMSUBLOT as s
where s.SUBLOTCODE = @pallettag

s.SUBLOTCODE определяется как char (20), и я ожидаю получить результат, только если я раскомментирую третью строку, где я добавил необходимые пробелы.

Ответы [ 2 ]

6 голосов
/ 23 ноября 2011

Конечные пробелы игнорируются при сравнении строк в SQL Server , за исключением выражений справа в LIKE сравнении.

SELECT CASE
         WHEN '168531' = '168531                ' THEN 'Y'
         ELSE 'N'
       END AS [=],
       CASE
         WHEN '168531' LIKE '168531                ' THEN 'Y'
         ELSE 'N'
       END AS [Like RHS],
       CASE
         WHEN '168531                ' LIKE '168531' THEN 'Y'
         ELSE 'N'
       END AS [Like LHS]    

Возвращает

=    Like RHS Like LHS
---- -------- --------
Y    N        Y
0 голосов
/ 23 ноября 2011

VARCHAR (20) означает любую длину символов до 20 включительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...