Для выхода из специальных символов в ПОДОБНОМ выражении, Вы снабжаете префиксом их символ ESC. Вы добираетесь для выбора который символ Escape использовать с ключевым словом ESCAPE. ( MSDN Касательно )
, Например, это выходит из символа %, с помощью \как символ Escape:
select * from table where myfield like '%15\% off%' ESCAPE '\'
, Если Вы не знаете то, чем символы будут в Вашей строке, и Вы не хотите рассматривать их как подстановочные знаки, можно снабдить префиксом все подстановочные символы символ Escape, например:
set @myString = replace(
replace(
replace(
replace( @myString
, '\', '\\' )
, '%', '\%' )
, '_', '\_' )
, '[', '\[' )
(Отмечают, что необходимо выйти символа Escape также, и удостоверяются, что это - внутреннее replace
, таким образом, Вы не выходите из тех добавленных из другого replace
операторы). Тогда можно использовать что-то вроде этого:
select * from table where myfield like '%' + @myString + '%' ESCAPE '\'
Также не забывают выделять больше места для Вашей @myString переменной, поскольку это станет более длинным со строковой заменой.
Вы определяете символ ESC. Документация здесь:
http://msdn.microsoft.com/en-us/library/ms179859.aspx
Вы хотите искать строки, которые включают символ ESC? Например, Вы хотите это:
select * from table where myfield like '%10%%'.
, Где Вы хотите искать все поля с 10%? Если это так, тогда можно использовать пункт ESCAPE, чтобы определить символ ESC и выйти из подстановочного символа.
select * from table where myfield like '%10!%%' ESCAPE '!'
Была аналогичная проблема (с использованием NHibernate, поэтому ключевое слово ESCAPE было бы очень сложно) и решила ее с помощью скобок. . Таким образом, ваш образец станет
WHERE ... LIKE '%aa[%]bb%'
Если вам нужно доказательство:
create table test (field nvarchar(100))
go
insert test values ('abcdef%hijklm')
insert test values ('abcdefghijklm')
go
select * from test where field like 'abcdef[%]hijklm'
go