2009-09-04 3 views
3

У меня есть таблица (T) с колонкой (с) определяется как VARCHAR 20, содержащий значения «A», «B» и «с»SQL - Почему параметр обрезается

Если я выполнить следующее sql, возвращается значение:

select * from table where c = 'a ' 

Почему?

Я предполагаю, что это кастинг/обрезка параметра каким-то образом, но почему?

Как бы я действительно искать 'a '

+1

Какая СУБД вы используете? – jmucchiello

+0

Это SQL Server 2005 – hitch

ответ

1

Чтобы сравнить его с колонками VARCHAR, ваша строка символы должны также быть типом VARCHAR. Varchar делает обрезание дополнительного окончания пробела. Это варьируется, следовательно VARchar. Обычная форма char не обрезает пробелы и фактически добавит дополнительные пробелы в конце литерала, если это необходимо. Вы можете проверить это (и исправить свой поиск с помощью функции LEN():

declare @a varchar(20) = 'a  ' 
select * from t where c = @a and len(@a) = Len(c) 
+0

Я обнаружил, что использование len не решило этого - если бы я сделал: declare @a varchar (20) set @a = 'a' выбрать len (c), len (@a) , * из t, где c = @a и len (c) = len (@a) , он возвратил строку, а значения len были равны как 4 Однако, если я использовал длину datalength, это не удалось. Спасибо за указатель. – hitch

0

Я использовал простое решение:.

declare @a varchar(20) = 'a  ' 
select * from t where c + '$' = @a + '$'