Как оператор и конечные пробелы в SQL Server

Этот соответствует column_name like 'CharEndsHere%'

а также

Этот не column_name like 'CharEndsHere'

Я знаю, что оператор like будет учитывать даже конечные пробелы, поэтому я просто скопировал точное значение столбца (с конечными пробелами) и вставил его.

Что-то вроде column_name like 'CharEndsHere ' но это не соответствует - почему?,

Я не использовал '=' оператор, так как тип столбцов ntext

Есть ли что-то, что я здесь упускаю или я не должен использовать like оператор таким образом?

Отредактировано: column_name like 'CharEndsHere__' (__ обозначены пробелы) 'CharEndsHere ' является точным значением в этой ячейке, используя like таким образом, действительным или нет?

Редактировать:

Это код, который я пробовал,

SELECT * 
FROM [DBName].[dbo].[TableName] 
WHERE [DBName].[dbo].[TableName].Address1 LIKE rtrim('4379 Susquehanna Trail S  ') 

Я также пытался без использования rtrimи все тот же результат

Изменить: Согласно ответу Блинди,

If a comparison in a query is to return all rows with the string LIKE 'abc' (abc
without a space), all rows that start with abc and have zero or more trailing 
blanks are returned.

Но в моем случае я спросил, Like 'abc' и есть клетка, содержащая 'abc '(with trailing spaces) который не возвращается. Это моя актуальная проблема

1 ответ

Решение

Это случай чтения документации, здесь очень четко указано: http://msdn.microsoft.com/en-us/library/ms179859.aspx

Когда вы выполняете сравнение строк с помощью LIKE, все символы в строке шаблона являются значимыми. Это включает в себя начальные или конечные пробелы. Если сравнение в запросе возвращает все строки со строкой LIKE 'abc ' (abc, за которым следует один пробел), строка, в которой значением этого столбца является abc (abc без пробела), не возвращается. Однако конечные пробелы в выражении, которому сопоставлен шаблон, игнорируются. Если сравнение в запросе возвращает все строки со строкой LIKE 'abc ' (abc без пробела), возвращаются все строки, которые начинаются с abc и имеют ноль или более завершающих пробелов.

Изменить: Согласно вашим комментариям, вы, похоже, ищете способ использования like игнорируя конечные пробелы. Используйте что-то вроде этого: field like rtrim('abc '), Он по-прежнему будет использовать индексы, потому что rtrim() является скалярным операндом, и он оценивается до фазы поиска.

Другие вопросы по тегам