Как оператор и конечные пробелы в 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()
является скалярным операндом, и он оценивается до фазы поиска.